Statistics
| Branch: | Revision:

root / savevm.c @ e7627482

History | View | Annotate | Download (63.2 kB)

1
/*
2
 * QEMU System Emulator
3
 *
4
 * Copyright (c) 2003-2008 Fabrice Bellard
5
 *
6
 * Permission is hereby granted, free of charge, to any person obtaining a copy
7
 * of this software and associated documentation files (the "Software"), to deal
8
 * in the Software without restriction, including without limitation the rights
9
 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10
 * copies of the Software, and to permit persons to whom the Software is
11
 * furnished to do so, subject to the following conditions:
12
 *
13
 * The above copyright notice and this permission notice shall be included in
14
 * all copies or substantial portions of the Software.
15
 *
16
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
19
 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
22
 * THE SOFTWARE.
23
 */
24
#include <unistd.h>
25
#include <fcntl.h>
26
#include <time.h>
27
#include <errno.h>
28
#include <sys/time.h>
29
#include <zlib.h>
30

    
31
/* Needed early for CONFIG_BSD etc. */
32
#include "config-host.h"
33

    
34
#ifndef _WIN32
35
#include <sys/times.h>
36
#include <sys/wait.h>
37
#include <termios.h>
38
#include <sys/mman.h>
39
#include <sys/ioctl.h>
40
#include <sys/resource.h>
41
#include <sys/socket.h>
42
#include <netinet/in.h>
43
#include <net/if.h>
44
#include <arpa/inet.h>
45
#include <dirent.h>
46
#include <netdb.h>
47
#include <sys/select.h>
48
#ifdef CONFIG_BSD
49
#include <sys/stat.h>
50
#if defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__DragonFly__)
51
#include <libutil.h>
52
#else
53
#include <util.h>
54
#endif
55
#ifdef __linux__
56
#include <pty.h>
57
#include <malloc.h>
58
#include <linux/rtc.h>
59
#endif
60
#endif
61
#endif
62

    
63
#ifdef _WIN32
64
#include <windows.h>
65
#include <malloc.h>
66
#include <sys/timeb.h>
67
#include <mmsystem.h>
68
#define getopt_long_only getopt_long
69
#define memalign(align, size) malloc(size)
70
#endif
71

    
72
#include "qemu-common.h"
73
#include "hw/hw.h"
74
#include "hw/qdev.h"
75
#include "net/net.h"
76
#include "monitor/monitor.h"
77
#include "sysemu/sysemu.h"
78
#include "qemu/timer.h"
79
#include "audio/audio.h"
80
#include "migration/migration.h"
81
#include "qemu/sockets.h"
82
#include "qemu/queue.h"
83
#include "qemu/timer.h"
84
#include "sysemu/cpus.h"
85
#include "exec/memory.h"
86
#include "qmp-commands.h"
87
#include "trace.h"
88
#include "qemu/bitops.h"
89

    
90
#define SELF_ANNOUNCE_ROUNDS 5
91

    
92
#ifndef ETH_P_RARP
93
#define ETH_P_RARP 0x8035
94
#endif
95
#define ARP_HTYPE_ETH 0x0001
96
#define ARP_PTYPE_IP 0x0800
97
#define ARP_OP_REQUEST_REV 0x3
98

    
99
static int announce_self_create(uint8_t *buf,
100
                                uint8_t *mac_addr)
101
{
102
    /* Ethernet header. */
103
    memset(buf, 0xff, 6);         /* destination MAC addr */
104
    memcpy(buf + 6, mac_addr, 6); /* source MAC addr */
105
    *(uint16_t *)(buf + 12) = htons(ETH_P_RARP); /* ethertype */
106

    
107
    /* RARP header. */
108
    *(uint16_t *)(buf + 14) = htons(ARP_HTYPE_ETH); /* hardware addr space */
109
    *(uint16_t *)(buf + 16) = htons(ARP_PTYPE_IP); /* protocol addr space */
110
    *(buf + 18) = 6; /* hardware addr length (ethernet) */
111
    *(buf + 19) = 4; /* protocol addr length (IPv4) */
112
    *(uint16_t *)(buf + 20) = htons(ARP_OP_REQUEST_REV); /* opcode */
113
    memcpy(buf + 22, mac_addr, 6); /* source hw addr */
114
    memset(buf + 28, 0x00, 4);     /* source protocol addr */
115
    memcpy(buf + 32, mac_addr, 6); /* target hw addr */
116
    memset(buf + 38, 0x00, 4);     /* target protocol addr */
117

    
118
    /* Padding to get up to 60 bytes (ethernet min packet size, minus FCS). */
119
    memset(buf + 42, 0x00, 18);
120

    
121
    return 60; /* len (FCS will be added by hardware) */
122
}
123

    
124
static void qemu_announce_self_iter(NICState *nic, void *opaque)
125
{
126
    uint8_t buf[60];
127
    int len;
128

    
129
    len = announce_self_create(buf, nic->conf->macaddr.a);
130

    
131
    qemu_send_packet_raw(&nic->nc, buf, len);
132
}
133

    
134

    
135
static void qemu_announce_self_once(void *opaque)
136
{
137
    static int count = SELF_ANNOUNCE_ROUNDS;
138
    QEMUTimer *timer = *(QEMUTimer **)opaque;
139

    
140
    qemu_foreach_nic(qemu_announce_self_iter, NULL);
141

    
142
    if (--count) {
143
        /* delay 50ms, 150ms, 250ms, ... */
144
        qemu_mod_timer(timer, qemu_get_clock_ms(rt_clock) +
145
                       50 + (SELF_ANNOUNCE_ROUNDS - count - 1) * 100);
146
    } else {
147
            qemu_del_timer(timer);
148
            qemu_free_timer(timer);
149
    }
150
}
151

    
152
void qemu_announce_self(void)
153
{
154
        static QEMUTimer *timer;
155
        timer = qemu_new_timer_ms(rt_clock, qemu_announce_self_once, &timer);
156
        qemu_announce_self_once(&timer);
157
}
158

    
159
/***********************************************************/
160
/* savevm/loadvm support */
161

    
162
#define IO_BUF_SIZE 32768
163

    
164
struct QEMUFile {
165
    const QEMUFileOps *ops;
166
    void *opaque;
167
    int is_write;
168

    
169
    int64_t buf_offset; /* start of buffer when writing, end of buffer
170
                           when reading */
171
    int buf_index;
172
    int buf_size; /* 0 when writing */
173
    uint8_t buf[IO_BUF_SIZE];
174

    
175
    int last_error;
176
};
177

    
178
typedef struct QEMUFileStdio
179
{
180
    FILE *stdio_file;
181
    QEMUFile *file;
182
} QEMUFileStdio;
183

    
184
typedef struct QEMUFileSocket
185
{
186
    int fd;
187
    QEMUFile *file;
188
} QEMUFileSocket;
189

    
190
static int socket_get_fd(void *opaque)
191
{
192
    QEMUFileSocket *s = opaque;
193

    
194
    return s->fd;
195
}
196

    
197
static int socket_get_buffer(void *opaque, uint8_t *buf, int64_t pos, int size)
198
{
199
    QEMUFileSocket *s = opaque;
200
    ssize_t len;
201

    
202
    for (;;) {
203
        len = qemu_recv(s->fd, buf, size, 0);
204
        if (len != -1) {
205
            break;
206
        }
207
        if (socket_error() == EAGAIN) {
208
            assert(qemu_in_coroutine());
209
            qemu_coroutine_yield();
210
        } else if (socket_error() != EINTR) {
211
            break;
212
        }
213
    }
214

    
215
    if (len == -1) {
216
        len = -socket_error();
217
    }
218
    return len;
219
}
220

    
221
static int socket_close(void *opaque)
222
{
223
    QEMUFileSocket *s = opaque;
224
    closesocket(s->fd);
225
    g_free(s);
226
    return 0;
227
}
228

    
229
static int stdio_get_fd(void *opaque)
230
{
231
    QEMUFileStdio *s = opaque;
232

    
233
    return fileno(s->stdio_file);
234
}
235

    
236
static int stdio_put_buffer(void *opaque, const uint8_t *buf, int64_t pos, int size)
237
{
238
    QEMUFileStdio *s = opaque;
239
    return fwrite(buf, 1, size, s->stdio_file);
240
}
241

    
242
static int stdio_get_buffer(void *opaque, uint8_t *buf, int64_t pos, int size)
243
{
244
    QEMUFileStdio *s = opaque;
245
    FILE *fp = s->stdio_file;
246
    int bytes;
247

    
248
    for (;;) {
249
        clearerr(fp);
250
        bytes = fread(buf, 1, size, fp);
251
        if (bytes != 0 || !ferror(fp)) {
252
            break;
253
        }
254
        if (errno == EAGAIN) {
255
            assert(qemu_in_coroutine());
256
            qemu_coroutine_yield();
257
        } else if (errno != EINTR) {
258
            break;
259
        }
260
    }
261
    return bytes;
262
}
263

    
264
static int stdio_pclose(void *opaque)
265
{
266
    QEMUFileStdio *s = opaque;
267
    int ret;
268
    ret = pclose(s->stdio_file);
269
    if (ret == -1) {
270
        ret = -errno;
271
    }
272
    g_free(s);
273
    return ret;
274
}
275

    
276
static int stdio_fclose(void *opaque)
277
{
278
    QEMUFileStdio *s = opaque;
279
    int ret = 0;
280
    if (fclose(s->stdio_file) == EOF) {
281
        ret = -errno;
282
    }
283
    g_free(s);
284
    return ret;
285
}
286

    
287
static const QEMUFileOps stdio_pipe_read_ops = {
288
    .get_fd =     stdio_get_fd,
289
    .get_buffer = stdio_get_buffer,
290
    .close =      stdio_pclose
291
};
292

    
293
static const QEMUFileOps stdio_pipe_write_ops = {
294
    .get_fd =     stdio_get_fd,
295
    .put_buffer = stdio_put_buffer,
296
    .close =      stdio_pclose
297
};
298

    
299
QEMUFile *qemu_popen(FILE *stdio_file, const char *mode)
300
{
301
    QEMUFileStdio *s;
302

    
303
    if (stdio_file == NULL || mode == NULL || (mode[0] != 'r' && mode[0] != 'w') || mode[1] != 0) {
304
        fprintf(stderr, "qemu_popen: Argument validity check failed\n");
305
        return NULL;
306
    }
307

    
308
    s = g_malloc0(sizeof(QEMUFileStdio));
309

    
310
    s->stdio_file = stdio_file;
311

    
312
    if(mode[0] == 'r') {
313
        s->file = qemu_fopen_ops(s, &stdio_pipe_read_ops);
314
    } else {
315
        s->file = qemu_fopen_ops(s, &stdio_pipe_write_ops);
316
    }
317
    return s->file;
318
}
319

    
320
QEMUFile *qemu_popen_cmd(const char *command, const char *mode)
321
{
322
    FILE *popen_file;
323

    
324
    popen_file = popen(command, mode);
325
    if(popen_file == NULL) {
326
        return NULL;
327
    }
328

    
329
    return qemu_popen(popen_file, mode);
330
}
331

    
332
static const QEMUFileOps stdio_file_read_ops = {
333
    .get_fd =     stdio_get_fd,
334
    .get_buffer = stdio_get_buffer,
335
    .close =      stdio_fclose
336
};
337

    
338
static const QEMUFileOps stdio_file_write_ops = {
339
    .get_fd =     stdio_get_fd,
340
    .put_buffer = stdio_put_buffer,
341
    .close =      stdio_fclose
342
};
343

    
344
QEMUFile *qemu_fdopen(int fd, const char *mode)
345
{
346
    QEMUFileStdio *s;
347

    
348
    if (mode == NULL ||
349
        (mode[0] != 'r' && mode[0] != 'w') ||
350
        mode[1] != 'b' || mode[2] != 0) {
351
        fprintf(stderr, "qemu_fdopen: Argument validity check failed\n");
352
        return NULL;
353
    }
354

    
355
    s = g_malloc0(sizeof(QEMUFileStdio));
356
    s->stdio_file = fdopen(fd, mode);
357
    if (!s->stdio_file)
358
        goto fail;
359

    
360
    if(mode[0] == 'r') {
361
        s->file = qemu_fopen_ops(s, &stdio_file_read_ops);
362
    } else {
363
        s->file = qemu_fopen_ops(s, &stdio_file_write_ops);
364
    }
365
    return s->file;
366

    
367
fail:
368
    g_free(s);
369
    return NULL;
370
}
371

    
372
static const QEMUFileOps socket_read_ops = {
373
    .get_fd =     socket_get_fd,
374
    .get_buffer = socket_get_buffer,
375
    .close =      socket_close
376
};
377

    
378
QEMUFile *qemu_fopen_socket(int fd)
379
{
380
    QEMUFileSocket *s = g_malloc0(sizeof(QEMUFileSocket));
381

    
382
    s->fd = fd;
383
    s->file = qemu_fopen_ops(s, &socket_read_ops);
384
    return s->file;
385
}
386

    
387
QEMUFile *qemu_fopen(const char *filename, const char *mode)
388
{
389
    QEMUFileStdio *s;
390

    
391
    if (mode == NULL ||
392
        (mode[0] != 'r' && mode[0] != 'w') ||
393
        mode[1] != 'b' || mode[2] != 0) {
394
        fprintf(stderr, "qemu_fopen: Argument validity check failed\n");
395
        return NULL;
396
    }
397

    
398
    s = g_malloc0(sizeof(QEMUFileStdio));
399

    
400
    s->stdio_file = fopen(filename, mode);
401
    if (!s->stdio_file)
402
        goto fail;
403
    
404
    if(mode[0] == 'w') {
405
        s->file = qemu_fopen_ops(s, &stdio_file_write_ops);
406
    } else {
407
        s->file = qemu_fopen_ops(s, &stdio_file_read_ops);
408
    }
409
    return s->file;
410
fail:
411
    g_free(s);
412
    return NULL;
413
}
414

    
415
static int block_put_buffer(void *opaque, const uint8_t *buf,
416
                           int64_t pos, int size)
417
{
418
    bdrv_save_vmstate(opaque, buf, pos, size);
419
    return size;
420
}
421

    
422
static int block_get_buffer(void *opaque, uint8_t *buf, int64_t pos, int size)
423
{
424
    return bdrv_load_vmstate(opaque, buf, pos, size);
425
}
426

    
427
static int bdrv_fclose(void *opaque)
428
{
429
    return bdrv_flush(opaque);
430
}
431

    
432
static const QEMUFileOps bdrv_read_ops = {
433
    .get_buffer = block_get_buffer,
434
    .close =      bdrv_fclose
435
};
436

    
437
static const QEMUFileOps bdrv_write_ops = {
438
    .put_buffer = block_put_buffer,
439
    .close =      bdrv_fclose
440
};
441

    
442
static QEMUFile *qemu_fopen_bdrv(BlockDriverState *bs, int is_writable)
443
{
444
    if (is_writable)
445
        return qemu_fopen_ops(bs, &bdrv_write_ops);
446
    return qemu_fopen_ops(bs, &bdrv_read_ops);
447
}
448

    
449
QEMUFile *qemu_fopen_ops(void *opaque, const QEMUFileOps *ops)
450
{
451
    QEMUFile *f;
452

    
453
    f = g_malloc0(sizeof(QEMUFile));
454

    
455
    f->opaque = opaque;
456
    f->ops = ops;
457
    f->is_write = 0;
458

    
459
    return f;
460
}
461

    
462
int qemu_file_get_error(QEMUFile *f)
463
{
464
    return f->last_error;
465
}
466

    
467
static void qemu_file_set_error(QEMUFile *f, int ret)
468
{
469
    f->last_error = ret;
470
}
471

    
472
/** Flushes QEMUFile buffer
473
 *
474
 */
475
static int qemu_fflush(QEMUFile *f)
476
{
477
    int ret = 0;
478

    
479
    if (!f->ops->put_buffer)
480
        return 0;
481

    
482
    if (f->is_write && f->buf_index > 0) {
483
        ret = f->ops->put_buffer(f->opaque, f->buf, f->buf_offset, f->buf_index);
484
        if (ret >= 0) {
485
            f->buf_offset += f->buf_index;
486
        }
487
        f->buf_index = 0;
488
    }
489
    return ret;
490
}
491

    
492
static void qemu_fill_buffer(QEMUFile *f)
493
{
494
    int len;
495
    int pending;
496

    
497
    if (!f->ops->get_buffer)
498
        return;
499

    
500
    if (f->is_write)
501
        abort();
502

    
503
    pending = f->buf_size - f->buf_index;
504
    if (pending > 0) {
505
        memmove(f->buf, f->buf + f->buf_index, pending);
506
    }
507
    f->buf_index = 0;
508
    f->buf_size = pending;
509

    
510
    len = f->ops->get_buffer(f->opaque, f->buf + pending, f->buf_offset,
511
                        IO_BUF_SIZE - pending);
512
    if (len > 0) {
513
        f->buf_size += len;
514
        f->buf_offset += len;
515
    } else if (len == 0) {
516
        qemu_file_set_error(f, -EIO);
517
    } else if (len != -EAGAIN)
518
        qemu_file_set_error(f, len);
519
}
520

    
521
int qemu_get_fd(QEMUFile *f)
522
{
523
    if (f->ops->get_fd) {
524
        return f->ops->get_fd(f->opaque);
525
    }
526
    return -1;
527
}
528

    
529
/** Closes the file
530
 *
531
 * Returns negative error value if any error happened on previous operations or
532
 * while closing the file. Returns 0 or positive number on success.
533
 *
534
 * The meaning of return value on success depends on the specific backend
535
 * being used.
536
 */
537
int qemu_fclose(QEMUFile *f)
538
{
539
    int ret;
540
    ret = qemu_fflush(f);
541

    
542
    if (f->ops->close) {
543
        int ret2 = f->ops->close(f->opaque);
544
        if (ret >= 0) {
545
            ret = ret2;
546
        }
547
    }
548
    /* If any error was spotted before closing, we should report it
549
     * instead of the close() return value.
550
     */
551
    if (f->last_error) {
552
        ret = f->last_error;
553
    }
554
    g_free(f);
555
    return ret;
556
}
557

    
558
void qemu_put_buffer(QEMUFile *f, const uint8_t *buf, int size)
559
{
560
    int l;
561

    
562
    if (f->last_error) {
563
        return;
564
    }
565

    
566
    if (f->is_write == 0 && f->buf_index > 0) {
567
        fprintf(stderr,
568
                "Attempted to write to buffer while read buffer is not empty\n");
569
        abort();
570
    }
571

    
572
    while (size > 0) {
573
        l = IO_BUF_SIZE - f->buf_index;
574
        if (l > size)
575
            l = size;
576
        memcpy(f->buf + f->buf_index, buf, l);
577
        f->is_write = 1;
578
        f->buf_index += l;
579
        buf += l;
580
        size -= l;
581
        if (f->buf_index >= IO_BUF_SIZE) {
582
            int ret = qemu_fflush(f);
583
            if (ret < 0) {
584
                qemu_file_set_error(f, ret);
585
                break;
586
            }
587
        }
588
    }
589
}
590

    
591
void qemu_put_byte(QEMUFile *f, int v)
592
{
593
    if (f->last_error) {
594
        return;
595
    }
596

    
597
    if (f->is_write == 0 && f->buf_index > 0) {
598
        fprintf(stderr,
599
                "Attempted to write to buffer while read buffer is not empty\n");
600
        abort();
601
    }
602

    
603
    f->buf[f->buf_index++] = v;
604
    f->is_write = 1;
605
    if (f->buf_index >= IO_BUF_SIZE) {
606
        int ret = qemu_fflush(f);
607
        if (ret < 0) {
608
            qemu_file_set_error(f, ret);
609
        }
610
    }
611
}
612

    
613
static void qemu_file_skip(QEMUFile *f, int size)
614
{
615
    if (f->buf_index + size <= f->buf_size) {
616
        f->buf_index += size;
617
    }
618
}
619

    
620
static int qemu_peek_buffer(QEMUFile *f, uint8_t *buf, int size, size_t offset)
621
{
622
    int pending;
623
    int index;
624

    
625
    if (f->is_write) {
626
        abort();
627
    }
628

    
629
    index = f->buf_index + offset;
630
    pending = f->buf_size - index;
631
    if (pending < size) {
632
        qemu_fill_buffer(f);
633
        index = f->buf_index + offset;
634
        pending = f->buf_size - index;
635
    }
636

    
637
    if (pending <= 0) {
638
        return 0;
639
    }
640
    if (size > pending) {
641
        size = pending;
642
    }
643

    
644
    memcpy(buf, f->buf + index, size);
645
    return size;
646
}
647

    
648
int qemu_get_buffer(QEMUFile *f, uint8_t *buf, int size)
649
{
650
    int pending = size;
651
    int done = 0;
652

    
653
    while (pending > 0) {
654
        int res;
655

    
656
        res = qemu_peek_buffer(f, buf, pending, 0);
657
        if (res == 0) {
658
            return done;
659
        }
660
        qemu_file_skip(f, res);
661
        buf += res;
662
        pending -= res;
663
        done += res;
664
    }
665
    return done;
666
}
667

    
668
static int qemu_peek_byte(QEMUFile *f, int offset)
669
{
670
    int index = f->buf_index + offset;
671

    
672
    if (f->is_write) {
673
        abort();
674
    }
675

    
676
    if (index >= f->buf_size) {
677
        qemu_fill_buffer(f);
678
        index = f->buf_index + offset;
679
        if (index >= f->buf_size) {
680
            return 0;
681
        }
682
    }
683
    return f->buf[index];
684
}
685

    
686
int qemu_get_byte(QEMUFile *f)
687
{
688
    int result;
689

    
690
    result = qemu_peek_byte(f, 0);
691
    qemu_file_skip(f, 1);
692
    return result;
693
}
694

    
695
static int64_t qemu_ftell(QEMUFile *f)
696
{
697
    return f->buf_offset - f->buf_size + f->buf_index;
698
}
699

    
700
int qemu_file_rate_limit(QEMUFile *f)
701
{
702
    if (f->ops->rate_limit)
703
        return f->ops->rate_limit(f->opaque);
704

    
705
    return 0;
706
}
707

    
708
int64_t qemu_file_get_rate_limit(QEMUFile *f)
709
{
710
    if (f->ops->get_rate_limit)
711
        return f->ops->get_rate_limit(f->opaque);
712

    
713
    return 0;
714
}
715

    
716
int64_t qemu_file_set_rate_limit(QEMUFile *f, int64_t new_rate)
717
{
718
    /* any failed or completed migration keeps its state to allow probing of
719
     * migration data, but has no associated file anymore */
720
    if (f && f->ops->set_rate_limit)
721
        return f->ops->set_rate_limit(f->opaque, new_rate);
722

    
723
    return 0;
724
}
725

    
726
void qemu_put_be16(QEMUFile *f, unsigned int v)
727
{
728
    qemu_put_byte(f, v >> 8);
729
    qemu_put_byte(f, v);
730
}
731

    
732
void qemu_put_be32(QEMUFile *f, unsigned int v)
733
{
734
    qemu_put_byte(f, v >> 24);
735
    qemu_put_byte(f, v >> 16);
736
    qemu_put_byte(f, v >> 8);
737
    qemu_put_byte(f, v);
738
}
739

    
740
void qemu_put_be64(QEMUFile *f, uint64_t v)
741
{
742
    qemu_put_be32(f, v >> 32);
743
    qemu_put_be32(f, v);
744
}
745

    
746
unsigned int qemu_get_be16(QEMUFile *f)
747
{
748
    unsigned int v;
749
    v = qemu_get_byte(f) << 8;
750
    v |= qemu_get_byte(f);
751
    return v;
752
}
753

    
754
unsigned int qemu_get_be32(QEMUFile *f)
755
{
756
    unsigned int v;
757
    v = qemu_get_byte(f) << 24;
758
    v |= qemu_get_byte(f) << 16;
759
    v |= qemu_get_byte(f) << 8;
760
    v |= qemu_get_byte(f);
761
    return v;
762
}
763

    
764
uint64_t qemu_get_be64(QEMUFile *f)
765
{
766
    uint64_t v;
767
    v = (uint64_t)qemu_get_be32(f) << 32;
768
    v |= qemu_get_be32(f);
769
    return v;
770
}
771

    
772

    
773
/* timer */
774

    
775
void qemu_put_timer(QEMUFile *f, QEMUTimer *ts)
776
{
777
    uint64_t expire_time;
778

    
779
    expire_time = qemu_timer_expire_time_ns(ts);
780
    qemu_put_be64(f, expire_time);
781
}
782

    
783
void qemu_get_timer(QEMUFile *f, QEMUTimer *ts)
784
{
785
    uint64_t expire_time;
786

    
787
    expire_time = qemu_get_be64(f);
788
    if (expire_time != -1) {
789
        qemu_mod_timer_ns(ts, expire_time);
790
    } else {
791
        qemu_del_timer(ts);
792
    }
793
}
794

    
795

    
796
/* bool */
797

    
798
static int get_bool(QEMUFile *f, void *pv, size_t size)
799
{
800
    bool *v = pv;
801
    *v = qemu_get_byte(f);
802
    return 0;
803
}
804

    
805
static void put_bool(QEMUFile *f, void *pv, size_t size)
806
{
807
    bool *v = pv;
808
    qemu_put_byte(f, *v);
809
}
810

    
811
const VMStateInfo vmstate_info_bool = {
812
    .name = "bool",
813
    .get  = get_bool,
814
    .put  = put_bool,
815
};
816

    
817
/* 8 bit int */
818

    
819
static int get_int8(QEMUFile *f, void *pv, size_t size)
820
{
821
    int8_t *v = pv;
822
    qemu_get_s8s(f, v);
823
    return 0;
824
}
825

    
826
static void put_int8(QEMUFile *f, void *pv, size_t size)
827
{
828
    int8_t *v = pv;
829
    qemu_put_s8s(f, v);
830
}
831

    
832
const VMStateInfo vmstate_info_int8 = {
833
    .name = "int8",
834
    .get  = get_int8,
835
    .put  = put_int8,
836
};
837

    
838
/* 16 bit int */
839

    
840
static int get_int16(QEMUFile *f, void *pv, size_t size)
841
{
842
    int16_t *v = pv;
843
    qemu_get_sbe16s(f, v);
844
    return 0;
845
}
846

    
847
static void put_int16(QEMUFile *f, void *pv, size_t size)
848
{
849
    int16_t *v = pv;
850
    qemu_put_sbe16s(f, v);
851
}
852

    
853
const VMStateInfo vmstate_info_int16 = {
854
    .name = "int16",
855
    .get  = get_int16,
856
    .put  = put_int16,
857
};
858

    
859
/* 32 bit int */
860

    
861
static int get_int32(QEMUFile *f, void *pv, size_t size)
862
{
863
    int32_t *v = pv;
864
    qemu_get_sbe32s(f, v);
865
    return 0;
866
}
867

    
868
static void put_int32(QEMUFile *f, void *pv, size_t size)
869
{
870
    int32_t *v = pv;
871
    qemu_put_sbe32s(f, v);
872
}
873

    
874
const VMStateInfo vmstate_info_int32 = {
875
    .name = "int32",
876
    .get  = get_int32,
877
    .put  = put_int32,
878
};
879

    
880
/* 32 bit int. See that the received value is the same than the one
881
   in the field */
882

    
883
static int get_int32_equal(QEMUFile *f, void *pv, size_t size)
884
{
885
    int32_t *v = pv;
886
    int32_t v2;
887
    qemu_get_sbe32s(f, &v2);
888

    
889
    if (*v == v2)
890
        return 0;
891
    return -EINVAL;
892
}
893

    
894
const VMStateInfo vmstate_info_int32_equal = {
895
    .name = "int32 equal",
896
    .get  = get_int32_equal,
897
    .put  = put_int32,
898
};
899

    
900
/* 32 bit int. See that the received value is the less or the same
901
   than the one in the field */
902

    
903
static int get_int32_le(QEMUFile *f, void *pv, size_t size)
904
{
905
    int32_t *old = pv;
906
    int32_t new;
907
    qemu_get_sbe32s(f, &new);
908

    
909
    if (*old <= new)
910
        return 0;
911
    return -EINVAL;
912
}
913

    
914
const VMStateInfo vmstate_info_int32_le = {
915
    .name = "int32 equal",
916
    .get  = get_int32_le,
917
    .put  = put_int32,
918
};
919

    
920
/* 64 bit int */
921

    
922
static int get_int64(QEMUFile *f, void *pv, size_t size)
923
{
924
    int64_t *v = pv;
925
    qemu_get_sbe64s(f, v);
926
    return 0;
927
}
928

    
929
static void put_int64(QEMUFile *f, void *pv, size_t size)
930
{
931
    int64_t *v = pv;
932
    qemu_put_sbe64s(f, v);
933
}
934

    
935
const VMStateInfo vmstate_info_int64 = {
936
    .name = "int64",
937
    .get  = get_int64,
938
    .put  = put_int64,
939
};
940

    
941
/* 8 bit unsigned int */
942

    
943
static int get_uint8(QEMUFile *f, void *pv, size_t size)
944
{
945
    uint8_t *v = pv;
946
    qemu_get_8s(f, v);
947
    return 0;
948
}
949

    
950
static void put_uint8(QEMUFile *f, void *pv, size_t size)
951
{
952
    uint8_t *v = pv;
953
    qemu_put_8s(f, v);
954
}
955

    
956
const VMStateInfo vmstate_info_uint8 = {
957
    .name = "uint8",
958
    .get  = get_uint8,
959
    .put  = put_uint8,
960
};
961

    
962
/* 16 bit unsigned int */
963

    
964
static int get_uint16(QEMUFile *f, void *pv, size_t size)
965
{
966
    uint16_t *v = pv;
967
    qemu_get_be16s(f, v);
968
    return 0;
969
}
970

    
971
static void put_uint16(QEMUFile *f, void *pv, size_t size)
972
{
973
    uint16_t *v = pv;
974
    qemu_put_be16s(f, v);
975
}
976

    
977
const VMStateInfo vmstate_info_uint16 = {
978
    .name = "uint16",
979
    .get  = get_uint16,
980
    .put  = put_uint16,
981
};
982

    
983
/* 32 bit unsigned int */
984

    
985
static int get_uint32(QEMUFile *f, void *pv, size_t size)
986
{
987
    uint32_t *v = pv;
988
    qemu_get_be32s(f, v);
989
    return 0;
990
}
991

    
992
static void put_uint32(QEMUFile *f, void *pv, size_t size)
993
{
994
    uint32_t *v = pv;
995
    qemu_put_be32s(f, v);
996
}
997

    
998
const VMStateInfo vmstate_info_uint32 = {
999
    .name = "uint32",
1000
    .get  = get_uint32,
1001
    .put  = put_uint32,
1002
};
1003

    
1004
/* 32 bit uint. See that the received value is the same than the one
1005
   in the field */
1006

    
1007
static int get_uint32_equal(QEMUFile *f, void *pv, size_t size)
1008
{
1009
    uint32_t *v = pv;
1010
    uint32_t v2;
1011
    qemu_get_be32s(f, &v2);
1012

    
1013
    if (*v == v2) {
1014
        return 0;
1015
    }
1016
    return -EINVAL;
1017
}
1018

    
1019
const VMStateInfo vmstate_info_uint32_equal = {
1020
    .name = "uint32 equal",
1021
    .get  = get_uint32_equal,
1022
    .put  = put_uint32,
1023
};
1024

    
1025
/* 64 bit unsigned int */
1026

    
1027
static int get_uint64(QEMUFile *f, void *pv, size_t size)
1028
{
1029
    uint64_t *v = pv;
1030
    qemu_get_be64s(f, v);
1031
    return 0;
1032
}
1033

    
1034
static void put_uint64(QEMUFile *f, void *pv, size_t size)
1035
{
1036
    uint64_t *v = pv;
1037
    qemu_put_be64s(f, v);
1038
}
1039

    
1040
const VMStateInfo vmstate_info_uint64 = {
1041
    .name = "uint64",
1042
    .get  = get_uint64,
1043
    .put  = put_uint64,
1044
};
1045

    
1046
/* 8 bit int. See that the received value is the same than the one
1047
   in the field */
1048

    
1049
static int get_uint8_equal(QEMUFile *f, void *pv, size_t size)
1050
{
1051
    uint8_t *v = pv;
1052
    uint8_t v2;
1053
    qemu_get_8s(f, &v2);
1054

    
1055
    if (*v == v2)
1056
        return 0;
1057
    return -EINVAL;
1058
}
1059

    
1060
const VMStateInfo vmstate_info_uint8_equal = {
1061
    .name = "uint8 equal",
1062
    .get  = get_uint8_equal,
1063
    .put  = put_uint8,
1064
};
1065

    
1066
/* 16 bit unsigned int int. See that the received value is the same than the one
1067
   in the field */
1068

    
1069
static int get_uint16_equal(QEMUFile *f, void *pv, size_t size)
1070
{
1071
    uint16_t *v = pv;
1072
    uint16_t v2;
1073
    qemu_get_be16s(f, &v2);
1074

    
1075
    if (*v == v2)
1076
        return 0;
1077
    return -EINVAL;
1078
}
1079

    
1080
const VMStateInfo vmstate_info_uint16_equal = {
1081
    .name = "uint16 equal",
1082
    .get  = get_uint16_equal,
1083
    .put  = put_uint16,
1084
};
1085

    
1086
/* timers  */
1087

    
1088
static int get_timer(QEMUFile *f, void *pv, size_t size)
1089
{
1090
    QEMUTimer *v = pv;
1091
    qemu_get_timer(f, v);
1092
    return 0;
1093
}
1094

    
1095
static void put_timer(QEMUFile *f, void *pv, size_t size)
1096
{
1097
    QEMUTimer *v = pv;
1098
    qemu_put_timer(f, v);
1099
}
1100

    
1101
const VMStateInfo vmstate_info_timer = {
1102
    .name = "timer",
1103
    .get  = get_timer,
1104
    .put  = put_timer,
1105
};
1106

    
1107
/* uint8_t buffers */
1108

    
1109
static int get_buffer(QEMUFile *f, void *pv, size_t size)
1110
{
1111
    uint8_t *v = pv;
1112
    qemu_get_buffer(f, v, size);
1113
    return 0;
1114
}
1115

    
1116
static void put_buffer(QEMUFile *f, void *pv, size_t size)
1117
{
1118
    uint8_t *v = pv;
1119
    qemu_put_buffer(f, v, size);
1120
}
1121

    
1122
const VMStateInfo vmstate_info_buffer = {
1123
    .name = "buffer",
1124
    .get  = get_buffer,
1125
    .put  = put_buffer,
1126
};
1127

    
1128
/* unused buffers: space that was used for some fields that are
1129
   not useful anymore */
1130

    
1131
static int get_unused_buffer(QEMUFile *f, void *pv, size_t size)
1132
{
1133
    uint8_t buf[1024];
1134
    int block_len;
1135

    
1136
    while (size > 0) {
1137
        block_len = MIN(sizeof(buf), size);
1138
        size -= block_len;
1139
        qemu_get_buffer(f, buf, block_len);
1140
    }
1141
   return 0;
1142
}
1143

    
1144
static void put_unused_buffer(QEMUFile *f, void *pv, size_t size)
1145
{
1146
    static const uint8_t buf[1024];
1147
    int block_len;
1148

    
1149
    while (size > 0) {
1150
        block_len = MIN(sizeof(buf), size);
1151
        size -= block_len;
1152
        qemu_put_buffer(f, buf, block_len);
1153
    }
1154
}
1155

    
1156
const VMStateInfo vmstate_info_unused_buffer = {
1157
    .name = "unused_buffer",
1158
    .get  = get_unused_buffer,
1159
    .put  = put_unused_buffer,
1160
};
1161

    
1162
/* bitmaps (as defined by bitmap.h). Note that size here is the size
1163
 * of the bitmap in bits. The on-the-wire format of a bitmap is 64
1164
 * bit words with the bits in big endian order. The in-memory format
1165
 * is an array of 'unsigned long', which may be either 32 or 64 bits.
1166
 */
1167
/* This is the number of 64 bit words sent over the wire */
1168
#define BITS_TO_U64S(nr) DIV_ROUND_UP(nr, 64)
1169
static int get_bitmap(QEMUFile *f, void *pv, size_t size)
1170
{
1171
    unsigned long *bmp = pv;
1172
    int i, idx = 0;
1173
    for (i = 0; i < BITS_TO_U64S(size); i++) {
1174
        uint64_t w = qemu_get_be64(f);
1175
        bmp[idx++] = w;
1176
        if (sizeof(unsigned long) == 4 && idx < BITS_TO_LONGS(size)) {
1177
            bmp[idx++] = w >> 32;
1178
        }
1179
    }
1180
    return 0;
1181
}
1182

    
1183
static void put_bitmap(QEMUFile *f, void *pv, size_t size)
1184
{
1185
    unsigned long *bmp = pv;
1186
    int i, idx = 0;
1187
    for (i = 0; i < BITS_TO_U64S(size); i++) {
1188
        uint64_t w = bmp[idx++];
1189
        if (sizeof(unsigned long) == 4 && idx < BITS_TO_LONGS(size)) {
1190
            w |= ((uint64_t)bmp[idx++]) << 32;
1191
        }
1192
        qemu_put_be64(f, w);
1193
    }
1194
}
1195

    
1196
const VMStateInfo vmstate_info_bitmap = {
1197
    .name = "bitmap",
1198
    .get = get_bitmap,
1199
    .put = put_bitmap,
1200
};
1201

    
1202
typedef struct CompatEntry {
1203
    char idstr[256];
1204
    int instance_id;
1205
} CompatEntry;
1206

    
1207
typedef struct SaveStateEntry {
1208
    QTAILQ_ENTRY(SaveStateEntry) entry;
1209
    char idstr[256];
1210
    int instance_id;
1211
    int alias_id;
1212
    int version_id;
1213
    int section_id;
1214
    SaveVMHandlers *ops;
1215
    const VMStateDescription *vmsd;
1216
    void *opaque;
1217
    CompatEntry *compat;
1218
    int no_migrate;
1219
    int is_ram;
1220
} SaveStateEntry;
1221

    
1222

    
1223
static QTAILQ_HEAD(savevm_handlers, SaveStateEntry) savevm_handlers =
1224
    QTAILQ_HEAD_INITIALIZER(savevm_handlers);
1225
static int global_section_id;
1226

    
1227
static int calculate_new_instance_id(const char *idstr)
1228
{
1229
    SaveStateEntry *se;
1230
    int instance_id = 0;
1231

    
1232
    QTAILQ_FOREACH(se, &savevm_handlers, entry) {
1233
        if (strcmp(idstr, se->idstr) == 0
1234
            && instance_id <= se->instance_id) {
1235
            instance_id = se->instance_id + 1;
1236
        }
1237
    }
1238
    return instance_id;
1239
}
1240

    
1241
static int calculate_compat_instance_id(const char *idstr)
1242
{
1243
    SaveStateEntry *se;
1244
    int instance_id = 0;
1245

    
1246
    QTAILQ_FOREACH(se, &savevm_handlers, entry) {
1247
        if (!se->compat)
1248
            continue;
1249

    
1250
        if (strcmp(idstr, se->compat->idstr) == 0
1251
            && instance_id <= se->compat->instance_id) {
1252
            instance_id = se->compat->instance_id + 1;
1253
        }
1254
    }
1255
    return instance_id;
1256
}
1257

    
1258
/* TODO: Individual devices generally have very little idea about the rest
1259
   of the system, so instance_id should be removed/replaced.
1260
   Meanwhile pass -1 as instance_id if you do not already have a clearly
1261
   distinguishing id for all instances of your device class. */
1262
int register_savevm_live(DeviceState *dev,
1263
                         const char *idstr,
1264
                         int instance_id,
1265
                         int version_id,
1266
                         SaveVMHandlers *ops,
1267
                         void *opaque)
1268
{
1269
    SaveStateEntry *se;
1270

    
1271
    se = g_malloc0(sizeof(SaveStateEntry));
1272
    se->version_id = version_id;
1273
    se->section_id = global_section_id++;
1274
    se->ops = ops;
1275
    se->opaque = opaque;
1276
    se->vmsd = NULL;
1277
    se->no_migrate = 0;
1278
    /* if this is a live_savem then set is_ram */
1279
    if (ops->save_live_setup != NULL) {
1280
        se->is_ram = 1;
1281
    }
1282

    
1283
    if (dev) {
1284
        char *id = qdev_get_dev_path(dev);
1285
        if (id) {
1286
            pstrcpy(se->idstr, sizeof(se->idstr), id);
1287
            pstrcat(se->idstr, sizeof(se->idstr), "/");
1288
            g_free(id);
1289

    
1290
            se->compat = g_malloc0(sizeof(CompatEntry));
1291
            pstrcpy(se->compat->idstr, sizeof(se->compat->idstr), idstr);
1292
            se->compat->instance_id = instance_id == -1 ?
1293
                         calculate_compat_instance_id(idstr) : instance_id;
1294
            instance_id = -1;
1295
        }
1296
    }
1297
    pstrcat(se->idstr, sizeof(se->idstr), idstr);
1298

    
1299
    if (instance_id == -1) {
1300
        se->instance_id = calculate_new_instance_id(se->idstr);
1301
    } else {
1302
        se->instance_id = instance_id;
1303
    }
1304
    assert(!se->compat || se->instance_id == 0);
1305
    /* add at the end of list */
1306
    QTAILQ_INSERT_TAIL(&savevm_handlers, se, entry);
1307
    return 0;
1308
}
1309

    
1310
int register_savevm(DeviceState *dev,
1311
                    const char *idstr,
1312
                    int instance_id,
1313
                    int version_id,
1314
                    SaveStateHandler *save_state,
1315
                    LoadStateHandler *load_state,
1316
                    void *opaque)
1317
{
1318
    SaveVMHandlers *ops = g_malloc0(sizeof(SaveVMHandlers));
1319
    ops->save_state = save_state;
1320
    ops->load_state = load_state;
1321
    return register_savevm_live(dev, idstr, instance_id, version_id,
1322
                                ops, opaque);
1323
}
1324

    
1325
void unregister_savevm(DeviceState *dev, const char *idstr, void *opaque)
1326
{
1327
    SaveStateEntry *se, *new_se;
1328
    char id[256] = "";
1329

    
1330
    if (dev) {
1331
        char *path = qdev_get_dev_path(dev);
1332
        if (path) {
1333
            pstrcpy(id, sizeof(id), path);
1334
            pstrcat(id, sizeof(id), "/");
1335
            g_free(path);
1336
        }
1337
    }
1338
    pstrcat(id, sizeof(id), idstr);
1339

    
1340
    QTAILQ_FOREACH_SAFE(se, &savevm_handlers, entry, new_se) {
1341
        if (strcmp(se->idstr, id) == 0 && se->opaque == opaque) {
1342
            QTAILQ_REMOVE(&savevm_handlers, se, entry);
1343
            if (se->compat) {
1344
                g_free(se->compat);
1345
            }
1346
            g_free(se->ops);
1347
            g_free(se);
1348
        }
1349
    }
1350
}
1351

    
1352
int vmstate_register_with_alias_id(DeviceState *dev, int instance_id,
1353
                                   const VMStateDescription *vmsd,
1354
                                   void *opaque, int alias_id,
1355
                                   int required_for_version)
1356
{
1357
    SaveStateEntry *se;
1358

    
1359
    /* If this triggers, alias support can be dropped for the vmsd. */
1360
    assert(alias_id == -1 || required_for_version >= vmsd->minimum_version_id);
1361

    
1362
    se = g_malloc0(sizeof(SaveStateEntry));
1363
    se->version_id = vmsd->version_id;
1364
    se->section_id = global_section_id++;
1365
    se->opaque = opaque;
1366
    se->vmsd = vmsd;
1367
    se->alias_id = alias_id;
1368
    se->no_migrate = vmsd->unmigratable;
1369

    
1370
    if (dev) {
1371
        char *id = qdev_get_dev_path(dev);
1372
        if (id) {
1373
            pstrcpy(se->idstr, sizeof(se->idstr), id);
1374
            pstrcat(se->idstr, sizeof(se->idstr), "/");
1375
            g_free(id);
1376

    
1377
            se->compat = g_malloc0(sizeof(CompatEntry));
1378
            pstrcpy(se->compat->idstr, sizeof(se->compat->idstr), vmsd->name);
1379
            se->compat->instance_id = instance_id == -1 ?
1380
                         calculate_compat_instance_id(vmsd->name) : instance_id;
1381
            instance_id = -1;
1382
        }
1383
    }
1384
    pstrcat(se->idstr, sizeof(se->idstr), vmsd->name);
1385

    
1386
    if (instance_id == -1) {
1387
        se->instance_id = calculate_new_instance_id(se->idstr);
1388
    } else {
1389
        se->instance_id = instance_id;
1390
    }
1391
    assert(!se->compat || se->instance_id == 0);
1392
    /* add at the end of list */
1393
    QTAILQ_INSERT_TAIL(&savevm_handlers, se, entry);
1394
    return 0;
1395
}
1396

    
1397
int vmstate_register(DeviceState *dev, int instance_id,
1398
                     const VMStateDescription *vmsd, void *opaque)
1399
{
1400
    return vmstate_register_with_alias_id(dev, instance_id, vmsd,
1401
                                          opaque, -1, 0);
1402
}
1403

    
1404
void vmstate_unregister(DeviceState *dev, const VMStateDescription *vmsd,
1405
                        void *opaque)
1406
{
1407
    SaveStateEntry *se, *new_se;
1408

    
1409
    QTAILQ_FOREACH_SAFE(se, &savevm_handlers, entry, new_se) {
1410
        if (se->vmsd == vmsd && se->opaque == opaque) {
1411
            QTAILQ_REMOVE(&savevm_handlers, se, entry);
1412
            if (se->compat) {
1413
                g_free(se->compat);
1414
            }
1415
            g_free(se);
1416
        }
1417
    }
1418
}
1419

    
1420
static void vmstate_subsection_save(QEMUFile *f, const VMStateDescription *vmsd,
1421
                                    void *opaque);
1422
static int vmstate_subsection_load(QEMUFile *f, const VMStateDescription *vmsd,
1423
                                   void *opaque);
1424

    
1425
int vmstate_load_state(QEMUFile *f, const VMStateDescription *vmsd,
1426
                       void *opaque, int version_id)
1427
{
1428
    VMStateField *field = vmsd->fields;
1429
    int ret;
1430

    
1431
    if (version_id > vmsd->version_id) {
1432
        return -EINVAL;
1433
    }
1434
    if (version_id < vmsd->minimum_version_id_old) {
1435
        return -EINVAL;
1436
    }
1437
    if  (version_id < vmsd->minimum_version_id) {
1438
        return vmsd->load_state_old(f, opaque, version_id);
1439
    }
1440
    if (vmsd->pre_load) {
1441
        int ret = vmsd->pre_load(opaque);
1442
        if (ret)
1443
            return ret;
1444
    }
1445
    while(field->name) {
1446
        if ((field->field_exists &&
1447
             field->field_exists(opaque, version_id)) ||
1448
            (!field->field_exists &&
1449
             field->version_id <= version_id)) {
1450
            void *base_addr = opaque + field->offset;
1451
            int i, n_elems = 1;
1452
            int size = field->size;
1453

    
1454
            if (field->flags & VMS_VBUFFER) {
1455
                size = *(int32_t *)(opaque+field->size_offset);
1456
                if (field->flags & VMS_MULTIPLY) {
1457
                    size *= field->size;
1458
                }
1459
            }
1460
            if (field->flags & VMS_ARRAY) {
1461
                n_elems = field->num;
1462
            } else if (field->flags & VMS_VARRAY_INT32) {
1463
                n_elems = *(int32_t *)(opaque+field->num_offset);
1464
            } else if (field->flags & VMS_VARRAY_UINT32) {
1465
                n_elems = *(uint32_t *)(opaque+field->num_offset);
1466
            } else if (field->flags & VMS_VARRAY_UINT16) {
1467
                n_elems = *(uint16_t *)(opaque+field->num_offset);
1468
            } else if (field->flags & VMS_VARRAY_UINT8) {
1469
                n_elems = *(uint8_t *)(opaque+field->num_offset);
1470
            }
1471
            if (field->flags & VMS_POINTER) {
1472
                base_addr = *(void **)base_addr + field->start;
1473
            }
1474
            for (i = 0; i < n_elems; i++) {
1475
                void *addr = base_addr + size * i;
1476

    
1477
                if (field->flags & VMS_ARRAY_OF_POINTER) {
1478
                    addr = *(void **)addr;
1479
                }
1480
                if (field->flags & VMS_STRUCT) {
1481
                    ret = vmstate_load_state(f, field->vmsd, addr, field->vmsd->version_id);
1482
                } else {
1483
                    ret = field->info->get(f, addr, size);
1484

    
1485
                }
1486
                if (ret < 0) {
1487
                    return ret;
1488
                }
1489
            }
1490
        }
1491
        field++;
1492
    }
1493
    ret = vmstate_subsection_load(f, vmsd, opaque);
1494
    if (ret != 0) {
1495
        return ret;
1496
    }
1497
    if (vmsd->post_load) {
1498
        return vmsd->post_load(opaque, version_id);
1499
    }
1500
    return 0;
1501
}
1502

    
1503
void vmstate_save_state(QEMUFile *f, const VMStateDescription *vmsd,
1504
                        void *opaque)
1505
{
1506
    VMStateField *field = vmsd->fields;
1507

    
1508
    if (vmsd->pre_save) {
1509
        vmsd->pre_save(opaque);
1510
    }
1511
    while(field->name) {
1512
        if (!field->field_exists ||
1513
            field->field_exists(opaque, vmsd->version_id)) {
1514
            void *base_addr = opaque + field->offset;
1515
            int i, n_elems = 1;
1516
            int size = field->size;
1517

    
1518
            if (field->flags & VMS_VBUFFER) {
1519
                size = *(int32_t *)(opaque+field->size_offset);
1520
                if (field->flags & VMS_MULTIPLY) {
1521
                    size *= field->size;
1522
                }
1523
            }
1524
            if (field->flags & VMS_ARRAY) {
1525
                n_elems = field->num;
1526
            } else if (field->flags & VMS_VARRAY_INT32) {
1527
                n_elems = *(int32_t *)(opaque+field->num_offset);
1528
            } else if (field->flags & VMS_VARRAY_UINT32) {
1529
                n_elems = *(uint32_t *)(opaque+field->num_offset);
1530
            } else if (field->flags & VMS_VARRAY_UINT16) {
1531
                n_elems = *(uint16_t *)(opaque+field->num_offset);
1532
            } else if (field->flags & VMS_VARRAY_UINT8) {
1533
                n_elems = *(uint8_t *)(opaque+field->num_offset);
1534
            }
1535
            if (field->flags & VMS_POINTER) {
1536
                base_addr = *(void **)base_addr + field->start;
1537
            }
1538
            for (i = 0; i < n_elems; i++) {
1539
                void *addr = base_addr + size * i;
1540

    
1541
                if (field->flags & VMS_ARRAY_OF_POINTER) {
1542
                    addr = *(void **)addr;
1543
                }
1544
                if (field->flags & VMS_STRUCT) {
1545
                    vmstate_save_state(f, field->vmsd, addr);
1546
                } else {
1547
                    field->info->put(f, addr, size);
1548
                }
1549
            }
1550
        }
1551
        field++;
1552
    }
1553
    vmstate_subsection_save(f, vmsd, opaque);
1554
}
1555

    
1556
static int vmstate_load(QEMUFile *f, SaveStateEntry *se, int version_id)
1557
{
1558
    if (!se->vmsd) {         /* Old style */
1559
        return se->ops->load_state(f, se->opaque, version_id);
1560
    }
1561
    return vmstate_load_state(f, se->vmsd, se->opaque, version_id);
1562
}
1563

    
1564
static void vmstate_save(QEMUFile *f, SaveStateEntry *se)
1565
{
1566
    if (!se->vmsd) {         /* Old style */
1567
        se->ops->save_state(f, se->opaque);
1568
        return;
1569
    }
1570
    vmstate_save_state(f,se->vmsd, se->opaque);
1571
}
1572

    
1573
#define QEMU_VM_FILE_MAGIC           0x5145564d
1574
#define QEMU_VM_FILE_VERSION_COMPAT  0x00000002
1575
#define QEMU_VM_FILE_VERSION         0x00000003
1576

    
1577
#define QEMU_VM_EOF                  0x00
1578
#define QEMU_VM_SECTION_START        0x01
1579
#define QEMU_VM_SECTION_PART         0x02
1580
#define QEMU_VM_SECTION_END          0x03
1581
#define QEMU_VM_SECTION_FULL         0x04
1582
#define QEMU_VM_SUBSECTION           0x05
1583

    
1584
bool qemu_savevm_state_blocked(Error **errp)
1585
{
1586
    SaveStateEntry *se;
1587

    
1588
    QTAILQ_FOREACH(se, &savevm_handlers, entry) {
1589
        if (se->no_migrate) {
1590
            error_set(errp, QERR_MIGRATION_NOT_SUPPORTED, se->idstr);
1591
            return true;
1592
        }
1593
    }
1594
    return false;
1595
}
1596

    
1597
int qemu_savevm_state_begin(QEMUFile *f,
1598
                            const MigrationParams *params)
1599
{
1600
    SaveStateEntry *se;
1601
    int ret;
1602

    
1603
    QTAILQ_FOREACH(se, &savevm_handlers, entry) {
1604
        if (!se->ops || !se->ops->set_params) {
1605
            continue;
1606
        }
1607
        se->ops->set_params(params, se->opaque);
1608
    }
1609
    
1610
    qemu_put_be32(f, QEMU_VM_FILE_MAGIC);
1611
    qemu_put_be32(f, QEMU_VM_FILE_VERSION);
1612

    
1613
    QTAILQ_FOREACH(se, &savevm_handlers, entry) {
1614
        int len;
1615

    
1616
        if (!se->ops || !se->ops->save_live_setup) {
1617
            continue;
1618
        }
1619
        if (se->ops && se->ops->is_active) {
1620
            if (!se->ops->is_active(se->opaque)) {
1621
                continue;
1622
            }
1623
        }
1624
        /* Section type */
1625
        qemu_put_byte(f, QEMU_VM_SECTION_START);
1626
        qemu_put_be32(f, se->section_id);
1627

    
1628
        /* ID string */
1629
        len = strlen(se->idstr);
1630
        qemu_put_byte(f, len);
1631
        qemu_put_buffer(f, (uint8_t *)se->idstr, len);
1632

    
1633
        qemu_put_be32(f, se->instance_id);
1634
        qemu_put_be32(f, se->version_id);
1635

    
1636
        ret = se->ops->save_live_setup(f, se->opaque);
1637
        if (ret < 0) {
1638
            qemu_savevm_state_cancel(f);
1639
            return ret;
1640
        }
1641
    }
1642
    ret = qemu_file_get_error(f);
1643
    if (ret != 0) {
1644
        qemu_savevm_state_cancel(f);
1645
    }
1646

    
1647
    return ret;
1648

    
1649
}
1650

    
1651
/*
1652
 * this function has three return values:
1653
 *   negative: there was one error, and we have -errno.
1654
 *   0 : We haven't finished, caller have to go again
1655
 *   1 : We have finished, we can go to complete phase
1656
 */
1657
int qemu_savevm_state_iterate(QEMUFile *f)
1658
{
1659
    SaveStateEntry *se;
1660
    int ret = 1;
1661

    
1662
    QTAILQ_FOREACH(se, &savevm_handlers, entry) {
1663
        if (!se->ops || !se->ops->save_live_iterate) {
1664
            continue;
1665
        }
1666
        if (se->ops && se->ops->is_active) {
1667
            if (!se->ops->is_active(se->opaque)) {
1668
                continue;
1669
            }
1670
        }
1671
        if (qemu_file_rate_limit(f)) {
1672
            return 0;
1673
        }
1674
        trace_savevm_section_start();
1675
        /* Section type */
1676
        qemu_put_byte(f, QEMU_VM_SECTION_PART);
1677
        qemu_put_be32(f, se->section_id);
1678

    
1679
        ret = se->ops->save_live_iterate(f, se->opaque);
1680
        trace_savevm_section_end(se->section_id);
1681

    
1682
        if (ret <= 0) {
1683
            /* Do not proceed to the next vmstate before this one reported
1684
               completion of the current stage. This serializes the migration
1685
               and reduces the probability that a faster changing state is
1686
               synchronized over and over again. */
1687
            break;
1688
        }
1689
    }
1690
    if (ret != 0) {
1691
        return ret;
1692
    }
1693
    ret = qemu_file_get_error(f);
1694
    if (ret != 0) {
1695
        qemu_savevm_state_cancel(f);
1696
    }
1697
    return ret;
1698
}
1699

    
1700
int qemu_savevm_state_complete(QEMUFile *f)
1701
{
1702
    SaveStateEntry *se;
1703
    int ret;
1704

    
1705
    cpu_synchronize_all_states();
1706

    
1707
    QTAILQ_FOREACH(se, &savevm_handlers, entry) {
1708
        if (!se->ops || !se->ops->save_live_complete) {
1709
            continue;
1710
        }
1711
        if (se->ops && se->ops->is_active) {
1712
            if (!se->ops->is_active(se->opaque)) {
1713
                continue;
1714
            }
1715
        }
1716
        trace_savevm_section_start();
1717
        /* Section type */
1718
        qemu_put_byte(f, QEMU_VM_SECTION_END);
1719
        qemu_put_be32(f, se->section_id);
1720

    
1721
        ret = se->ops->save_live_complete(f, se->opaque);
1722
        trace_savevm_section_end(se->section_id);
1723
        if (ret < 0) {
1724
            return ret;
1725
        }
1726
    }
1727

    
1728
    QTAILQ_FOREACH(se, &savevm_handlers, entry) {
1729
        int len;
1730

    
1731
        if ((!se->ops || !se->ops->save_state) && !se->vmsd) {
1732
            continue;
1733
        }
1734
        trace_savevm_section_start();
1735
        /* Section type */
1736
        qemu_put_byte(f, QEMU_VM_SECTION_FULL);
1737
        qemu_put_be32(f, se->section_id);
1738

    
1739
        /* ID string */
1740
        len = strlen(se->idstr);
1741
        qemu_put_byte(f, len);
1742
        qemu_put_buffer(f, (uint8_t *)se->idstr, len);
1743

    
1744
        qemu_put_be32(f, se->instance_id);
1745
        qemu_put_be32(f, se->version_id);
1746

    
1747
        vmstate_save(f, se);
1748
        trace_savevm_section_end(se->section_id);
1749
    }
1750

    
1751
    qemu_put_byte(f, QEMU_VM_EOF);
1752

    
1753
    return qemu_file_get_error(f);
1754
}
1755

    
1756
void qemu_savevm_state_cancel(QEMUFile *f)
1757
{
1758
    SaveStateEntry *se;
1759

    
1760
    QTAILQ_FOREACH(se, &savevm_handlers, entry) {
1761
        if (se->ops && se->ops->cancel) {
1762
            se->ops->cancel(se->opaque);
1763
        }
1764
    }
1765
}
1766

    
1767
static int qemu_savevm_state(QEMUFile *f)
1768
{
1769
    int ret;
1770
    MigrationParams params = {
1771
        .blk = 0,
1772
        .shared = 0
1773
    };
1774

    
1775
    if (qemu_savevm_state_blocked(NULL)) {
1776
        ret = -EINVAL;
1777
        goto out;
1778
    }
1779

    
1780
    ret = qemu_savevm_state_begin(f, &params);
1781
    if (ret < 0)
1782
        goto out;
1783

    
1784
    do {
1785
        ret = qemu_savevm_state_iterate(f);
1786
        if (ret < 0)
1787
            goto out;
1788
    } while (ret == 0);
1789

    
1790
    ret = qemu_savevm_state_complete(f);
1791

    
1792
out:
1793
    if (ret == 0) {
1794
        ret = qemu_file_get_error(f);
1795
    }
1796

    
1797
    return ret;
1798
}
1799

    
1800
static int qemu_save_device_state(QEMUFile *f)
1801
{
1802
    SaveStateEntry *se;
1803

    
1804
    qemu_put_be32(f, QEMU_VM_FILE_MAGIC);
1805
    qemu_put_be32(f, QEMU_VM_FILE_VERSION);
1806

    
1807
    cpu_synchronize_all_states();
1808

    
1809
    QTAILQ_FOREACH(se, &savevm_handlers, entry) {
1810
        int len;
1811

    
1812
        if (se->is_ram) {
1813
            continue;
1814
        }
1815
        if ((!se->ops || !se->ops->save_state) && !se->vmsd) {
1816
            continue;
1817
        }
1818

    
1819
        /* Section type */
1820
        qemu_put_byte(f, QEMU_VM_SECTION_FULL);
1821
        qemu_put_be32(f, se->section_id);
1822

    
1823
        /* ID string */
1824
        len = strlen(se->idstr);
1825
        qemu_put_byte(f, len);
1826
        qemu_put_buffer(f, (uint8_t *)se->idstr, len);
1827

    
1828
        qemu_put_be32(f, se->instance_id);
1829
        qemu_put_be32(f, se->version_id);
1830

    
1831
        vmstate_save(f, se);
1832
    }
1833

    
1834
    qemu_put_byte(f, QEMU_VM_EOF);
1835

    
1836
    return qemu_file_get_error(f);
1837
}
1838

    
1839
static SaveStateEntry *find_se(const char *idstr, int instance_id)
1840
{
1841
    SaveStateEntry *se;
1842

    
1843
    QTAILQ_FOREACH(se, &savevm_handlers, entry) {
1844
        if (!strcmp(se->idstr, idstr) &&
1845
            (instance_id == se->instance_id ||
1846
             instance_id == se->alias_id))
1847
            return se;
1848
        /* Migrating from an older version? */
1849
        if (strstr(se->idstr, idstr) && se->compat) {
1850
            if (!strcmp(se->compat->idstr, idstr) &&
1851
                (instance_id == se->compat->instance_id ||
1852
                 instance_id == se->alias_id))
1853
                return se;
1854
        }
1855
    }
1856
    return NULL;
1857
}
1858

    
1859
static const VMStateDescription *vmstate_get_subsection(const VMStateSubsection *sub, char *idstr)
1860
{
1861
    while(sub && sub->needed) {
1862
        if (strcmp(idstr, sub->vmsd->name) == 0) {
1863
            return sub->vmsd;
1864
        }
1865
        sub++;
1866
    }
1867
    return NULL;
1868
}
1869

    
1870
static int vmstate_subsection_load(QEMUFile *f, const VMStateDescription *vmsd,
1871
                                   void *opaque)
1872
{
1873
    while (qemu_peek_byte(f, 0) == QEMU_VM_SUBSECTION) {
1874
        char idstr[256];
1875
        int ret;
1876
        uint8_t version_id, len, size;
1877
        const VMStateDescription *sub_vmsd;
1878

    
1879
        len = qemu_peek_byte(f, 1);
1880
        if (len < strlen(vmsd->name) + 1) {
1881
            /* subsection name has be be "section_name/a" */
1882
            return 0;
1883
        }
1884
        size = qemu_peek_buffer(f, (uint8_t *)idstr, len, 2);
1885
        if (size != len) {
1886
            return 0;
1887
        }
1888
        idstr[size] = 0;
1889

    
1890
        if (strncmp(vmsd->name, idstr, strlen(vmsd->name)) != 0) {
1891
            /* it don't have a valid subsection name */
1892
            return 0;
1893
        }
1894
        sub_vmsd = vmstate_get_subsection(vmsd->subsections, idstr);
1895
        if (sub_vmsd == NULL) {
1896
            return -ENOENT;
1897
        }
1898
        qemu_file_skip(f, 1); /* subsection */
1899
        qemu_file_skip(f, 1); /* len */
1900
        qemu_file_skip(f, len); /* idstr */
1901
        version_id = qemu_get_be32(f);
1902

    
1903
        ret = vmstate_load_state(f, sub_vmsd, opaque, version_id);
1904
        if (ret) {
1905
            return ret;
1906
        }
1907
    }
1908
    return 0;
1909
}
1910

    
1911
static void vmstate_subsection_save(QEMUFile *f, const VMStateDescription *vmsd,
1912
                                    void *opaque)
1913
{
1914
    const VMStateSubsection *sub = vmsd->subsections;
1915

    
1916
    while (sub && sub->needed) {
1917
        if (sub->needed(opaque)) {
1918
            const VMStateDescription *vmsd = sub->vmsd;
1919
            uint8_t len;
1920

    
1921
            qemu_put_byte(f, QEMU_VM_SUBSECTION);
1922
            len = strlen(vmsd->name);
1923
            qemu_put_byte(f, len);
1924
            qemu_put_buffer(f, (uint8_t *)vmsd->name, len);
1925
            qemu_put_be32(f, vmsd->version_id);
1926
            vmstate_save_state(f, vmsd, opaque);
1927
        }
1928
        sub++;
1929
    }
1930
}
1931

    
1932
typedef struct LoadStateEntry {
1933
    QLIST_ENTRY(LoadStateEntry) entry;
1934
    SaveStateEntry *se;
1935
    int section_id;
1936
    int version_id;
1937
} LoadStateEntry;
1938

    
1939
int qemu_loadvm_state(QEMUFile *f)
1940
{
1941
    QLIST_HEAD(, LoadStateEntry) loadvm_handlers =
1942
        QLIST_HEAD_INITIALIZER(loadvm_handlers);
1943
    LoadStateEntry *le, *new_le;
1944
    uint8_t section_type;
1945
    unsigned int v;
1946
    int ret;
1947

    
1948
    if (qemu_savevm_state_blocked(NULL)) {
1949
        return -EINVAL;
1950
    }
1951

    
1952
    v = qemu_get_be32(f);
1953
    if (v != QEMU_VM_FILE_MAGIC)
1954
        return -EINVAL;
1955

    
1956
    v = qemu_get_be32(f);
1957
    if (v == QEMU_VM_FILE_VERSION_COMPAT) {
1958
        fprintf(stderr, "SaveVM v2 format is obsolete and don't work anymore\n");
1959
        return -ENOTSUP;
1960
    }
1961
    if (v != QEMU_VM_FILE_VERSION)
1962
        return -ENOTSUP;
1963

    
1964
    while ((section_type = qemu_get_byte(f)) != QEMU_VM_EOF) {
1965
        uint32_t instance_id, version_id, section_id;
1966
        SaveStateEntry *se;
1967
        char idstr[257];
1968
        int len;
1969

    
1970
        switch (section_type) {
1971
        case QEMU_VM_SECTION_START:
1972
        case QEMU_VM_SECTION_FULL:
1973
            /* Read section start */
1974
            section_id = qemu_get_be32(f);
1975
            len = qemu_get_byte(f);
1976
            qemu_get_buffer(f, (uint8_t *)idstr, len);
1977
            idstr[len] = 0;
1978
            instance_id = qemu_get_be32(f);
1979
            version_id = qemu_get_be32(f);
1980

    
1981
            /* Find savevm section */
1982
            se = find_se(idstr, instance_id);
1983
            if (se == NULL) {
1984
                fprintf(stderr, "Unknown savevm section or instance '%s' %d\n", idstr, instance_id);
1985
                ret = -EINVAL;
1986
                goto out;
1987
            }
1988

    
1989
            /* Validate version */
1990
            if (version_id > se->version_id) {
1991
                fprintf(stderr, "savevm: unsupported version %d for '%s' v%d\n",
1992
                        version_id, idstr, se->version_id);
1993
                ret = -EINVAL;
1994
                goto out;
1995
            }
1996

    
1997
            /* Add entry */
1998
            le = g_malloc0(sizeof(*le));
1999

    
2000
            le->se = se;
2001
            le->section_id = section_id;
2002
            le->version_id = version_id;
2003
            QLIST_INSERT_HEAD(&loadvm_handlers, le, entry);
2004

    
2005
            ret = vmstate_load(f, le->se, le->version_id);
2006
            if (ret < 0) {
2007
                fprintf(stderr, "qemu: warning: error while loading state for instance 0x%x of device '%s'\n",
2008
                        instance_id, idstr);
2009
                goto out;
2010
            }
2011
            break;
2012
        case QEMU_VM_SECTION_PART:
2013
        case QEMU_VM_SECTION_END:
2014
            section_id = qemu_get_be32(f);
2015

    
2016
            QLIST_FOREACH(le, &loadvm_handlers, entry) {
2017
                if (le->section_id == section_id) {
2018
                    break;
2019
                }
2020
            }
2021
            if (le == NULL) {
2022
                fprintf(stderr, "Unknown savevm section %d\n", section_id);
2023
                ret = -EINVAL;
2024
                goto out;
2025
            }
2026

    
2027
            ret = vmstate_load(f, le->se, le->version_id);
2028
            if (ret < 0) {
2029
                fprintf(stderr, "qemu: warning: error while loading state section id %d\n",
2030
                        section_id);
2031
                goto out;
2032
            }
2033
            break;
2034
        default:
2035
            fprintf(stderr, "Unknown savevm section type %d\n", section_type);
2036
            ret = -EINVAL;
2037
            goto out;
2038
        }
2039
    }
2040

    
2041
    cpu_synchronize_all_post_init();
2042

    
2043
    ret = 0;
2044

    
2045
out:
2046
    QLIST_FOREACH_SAFE(le, &loadvm_handlers, entry, new_le) {
2047
        QLIST_REMOVE(le, entry);
2048
        g_free(le);
2049
    }
2050

    
2051
    if (ret == 0) {
2052
        ret = qemu_file_get_error(f);
2053
    }
2054

    
2055
    return ret;
2056
}
2057

    
2058
static int bdrv_snapshot_find(BlockDriverState *bs, QEMUSnapshotInfo *sn_info,
2059
                              const char *name)
2060
{
2061
    QEMUSnapshotInfo *sn_tab, *sn;
2062
    int nb_sns, i, ret;
2063

    
2064
    ret = -ENOENT;
2065
    nb_sns = bdrv_snapshot_list(bs, &sn_tab);
2066
    if (nb_sns < 0)
2067
        return ret;
2068
    for(i = 0; i < nb_sns; i++) {
2069
        sn = &sn_tab[i];
2070
        if (!strcmp(sn->id_str, name) || !strcmp(sn->name, name)) {
2071
            *sn_info = *sn;
2072
            ret = 0;
2073
            break;
2074
        }
2075
    }
2076
    g_free(sn_tab);
2077
    return ret;
2078
}
2079

    
2080
/*
2081
 * Deletes snapshots of a given name in all opened images.
2082
 */
2083
static int del_existing_snapshots(Monitor *mon, const char *name)
2084
{
2085
    BlockDriverState *bs;
2086
    QEMUSnapshotInfo sn1, *snapshot = &sn1;
2087
    int ret;
2088

    
2089
    bs = NULL;
2090
    while ((bs = bdrv_next(bs))) {
2091
        if (bdrv_can_snapshot(bs) &&
2092
            bdrv_snapshot_find(bs, snapshot, name) >= 0)
2093
        {
2094
            ret = bdrv_snapshot_delete(bs, name);
2095
            if (ret < 0) {
2096
                monitor_printf(mon,
2097
                               "Error while deleting snapshot on '%s'\n",
2098
                               bdrv_get_device_name(bs));
2099
                return -1;
2100
            }
2101
        }
2102
    }
2103

    
2104
    return 0;
2105
}
2106

    
2107
void do_savevm(Monitor *mon, const QDict *qdict)
2108
{
2109
    BlockDriverState *bs, *bs1;
2110
    QEMUSnapshotInfo sn1, *sn = &sn1, old_sn1, *old_sn = &old_sn1;
2111
    int ret;
2112
    QEMUFile *f;
2113
    int saved_vm_running;
2114
    uint64_t vm_state_size;
2115
#ifdef _WIN32
2116
    struct _timeb tb;
2117
    struct tm *ptm;
2118
#else
2119
    struct timeval tv;
2120
    struct tm tm;
2121
#endif
2122
    const char *name = qdict_get_try_str(qdict, "name");
2123

    
2124
    /* Verify if there is a device that doesn't support snapshots and is writable */
2125
    bs = NULL;
2126
    while ((bs = bdrv_next(bs))) {
2127

    
2128
        if (!bdrv_is_inserted(bs) || bdrv_is_read_only(bs)) {
2129
            continue;
2130
        }
2131

    
2132
        if (!bdrv_can_snapshot(bs)) {
2133
            monitor_printf(mon, "Device '%s' is writable but does not support snapshots.\n",
2134
                               bdrv_get_device_name(bs));
2135
            return;
2136
        }
2137
    }
2138

    
2139
    bs = bdrv_snapshots();
2140
    if (!bs) {
2141
        monitor_printf(mon, "No block device can accept snapshots\n");
2142
        return;
2143
    }
2144

    
2145
    saved_vm_running = runstate_is_running();
2146
    vm_stop(RUN_STATE_SAVE_VM);
2147

    
2148
    memset(sn, 0, sizeof(*sn));
2149

    
2150
    /* fill auxiliary fields */
2151
#ifdef _WIN32
2152
    _ftime(&tb);
2153
    sn->date_sec = tb.time;
2154
    sn->date_nsec = tb.millitm * 1000000;
2155
#else
2156
    gettimeofday(&tv, NULL);
2157
    sn->date_sec = tv.tv_sec;
2158
    sn->date_nsec = tv.tv_usec * 1000;
2159
#endif
2160
    sn->vm_clock_nsec = qemu_get_clock_ns(vm_clock);
2161

    
2162
    if (name) {
2163
        ret = bdrv_snapshot_find(bs, old_sn, name);
2164
        if (ret >= 0) {
2165
            pstrcpy(sn->name, sizeof(sn->name), old_sn->name);
2166
            pstrcpy(sn->id_str, sizeof(sn->id_str), old_sn->id_str);
2167
        } else {
2168
            pstrcpy(sn->name, sizeof(sn->name), name);
2169
        }
2170
    } else {
2171
#ifdef _WIN32
2172
        time_t t = tb.time;
2173
        ptm = localtime(&t);
2174
        strftime(sn->name, sizeof(sn->name), "vm-%Y%m%d%H%M%S", ptm);
2175
#else
2176
        /* cast below needed for OpenBSD where tv_sec is still 'long' */
2177
        localtime_r((const time_t *)&tv.tv_sec, &tm);
2178
        strftime(sn->name, sizeof(sn->name), "vm-%Y%m%d%H%M%S", &tm);
2179
#endif
2180
    }
2181

    
2182
    /* Delete old snapshots of the same name */
2183
    if (name && del_existing_snapshots(mon, name) < 0) {
2184
        goto the_end;
2185
    }
2186

    
2187
    /* save the VM state */
2188
    f = qemu_fopen_bdrv(bs, 1);
2189
    if (!f) {
2190
        monitor_printf(mon, "Could not open VM state file\n");
2191
        goto the_end;
2192
    }
2193
    ret = qemu_savevm_state(f);
2194
    vm_state_size = qemu_ftell(f);
2195
    qemu_fclose(f);
2196
    if (ret < 0) {
2197
        monitor_printf(mon, "Error %d while writing VM\n", ret);
2198
        goto the_end;
2199
    }
2200

    
2201
    /* create the snapshots */
2202

    
2203
    bs1 = NULL;
2204
    while ((bs1 = bdrv_next(bs1))) {
2205
        if (bdrv_can_snapshot(bs1)) {
2206
            /* Write VM state size only to the image that contains the state */
2207
            sn->vm_state_size = (bs == bs1 ? vm_state_size : 0);
2208
            ret = bdrv_snapshot_create(bs1, sn);
2209
            if (ret < 0) {
2210
                monitor_printf(mon, "Error while creating snapshot on '%s'\n",
2211
                               bdrv_get_device_name(bs1));
2212
            }
2213
        }
2214
    }
2215

    
2216
 the_end:
2217
    if (saved_vm_running)
2218
        vm_start();
2219
}
2220

    
2221
void qmp_xen_save_devices_state(const char *filename, Error **errp)
2222
{
2223
    QEMUFile *f;
2224
    int saved_vm_running;
2225
    int ret;
2226

    
2227
    saved_vm_running = runstate_is_running();
2228
    vm_stop(RUN_STATE_SAVE_VM);
2229

    
2230
    f = qemu_fopen(filename, "wb");
2231
    if (!f) {
2232
        error_set(errp, QERR_OPEN_FILE_FAILED, filename);
2233
        goto the_end;
2234
    }
2235
    ret = qemu_save_device_state(f);
2236
    qemu_fclose(f);
2237
    if (ret < 0) {
2238
        error_set(errp, QERR_IO_ERROR);
2239
    }
2240

    
2241
 the_end:
2242
    if (saved_vm_running)
2243
        vm_start();
2244
}
2245

    
2246
int load_vmstate(const char *name)
2247
{
2248
    BlockDriverState *bs, *bs_vm_state;
2249
    QEMUSnapshotInfo sn;
2250
    QEMUFile *f;
2251
    int ret;
2252

    
2253
    bs_vm_state = bdrv_snapshots();
2254
    if (!bs_vm_state) {
2255
        error_report("No block device supports snapshots");
2256
        return -ENOTSUP;
2257
    }
2258

    
2259
    /* Don't even try to load empty VM states */
2260
    ret = bdrv_snapshot_find(bs_vm_state, &sn, name);
2261
    if (ret < 0) {
2262
        return ret;
2263
    } else if (sn.vm_state_size == 0) {
2264
        error_report("This is a disk-only snapshot. Revert to it offline "
2265
            "using qemu-img.");
2266
        return -EINVAL;
2267
    }
2268

    
2269
    /* Verify if there is any device that doesn't support snapshots and is
2270
    writable and check if the requested snapshot is available too. */
2271
    bs = NULL;
2272
    while ((bs = bdrv_next(bs))) {
2273

    
2274
        if (!bdrv_is_inserted(bs) || bdrv_is_read_only(bs)) {
2275
            continue;
2276
        }
2277

    
2278
        if (!bdrv_can_snapshot(bs)) {
2279
            error_report("Device '%s' is writable but does not support snapshots.",
2280
                               bdrv_get_device_name(bs));
2281
            return -ENOTSUP;
2282
        }
2283

    
2284
        ret = bdrv_snapshot_find(bs, &sn, name);
2285
        if (ret < 0) {
2286
            error_report("Device '%s' does not have the requested snapshot '%s'",
2287
                           bdrv_get_device_name(bs), name);
2288
            return ret;
2289
        }
2290
    }
2291

    
2292
    /* Flush all IO requests so they don't interfere with the new state.  */
2293
    bdrv_drain_all();
2294

    
2295
    bs = NULL;
2296
    while ((bs = bdrv_next(bs))) {
2297
        if (bdrv_can_snapshot(bs)) {
2298
            ret = bdrv_snapshot_goto(bs, name);
2299
            if (ret < 0) {
2300
                error_report("Error %d while activating snapshot '%s' on '%s'",
2301
                             ret, name, bdrv_get_device_name(bs));
2302
                return ret;
2303
            }
2304
        }
2305
    }
2306

    
2307
    /* restore the VM state */
2308
    f = qemu_fopen_bdrv(bs_vm_state, 0);
2309
    if (!f) {
2310
        error_report("Could not open VM state file");
2311
        return -EINVAL;
2312
    }
2313

    
2314
    qemu_system_reset(VMRESET_SILENT);
2315
    ret = qemu_loadvm_state(f);
2316

    
2317
    qemu_fclose(f);
2318
    if (ret < 0) {
2319
        error_report("Error %d while loading VM state", ret);
2320
        return ret;
2321
    }
2322

    
2323
    return 0;
2324
}
2325

    
2326
void do_delvm(Monitor *mon, const QDict *qdict)
2327
{
2328
    BlockDriverState *bs, *bs1;
2329
    int ret;
2330
    const char *name = qdict_get_str(qdict, "name");
2331

    
2332
    bs = bdrv_snapshots();
2333
    if (!bs) {
2334
        monitor_printf(mon, "No block device supports snapshots\n");
2335
        return;
2336
    }
2337

    
2338
    bs1 = NULL;
2339
    while ((bs1 = bdrv_next(bs1))) {
2340
        if (bdrv_can_snapshot(bs1)) {
2341
            ret = bdrv_snapshot_delete(bs1, name);
2342
            if (ret < 0) {
2343
                if (ret == -ENOTSUP)
2344
                    monitor_printf(mon,
2345
                                   "Snapshots not supported on device '%s'\n",
2346
                                   bdrv_get_device_name(bs1));
2347
                else
2348
                    monitor_printf(mon, "Error %d while deleting snapshot on "
2349
                                   "'%s'\n", ret, bdrv_get_device_name(bs1));
2350
            }
2351
        }
2352
    }
2353
}
2354

    
2355
void do_info_snapshots(Monitor *mon)
2356
{
2357
    BlockDriverState *bs, *bs1;
2358
    QEMUSnapshotInfo *sn_tab, *sn, s, *sn_info = &s;
2359
    int nb_sns, i, ret, available;
2360
    int total;
2361
    int *available_snapshots;
2362
    char buf[256];
2363

    
2364
    bs = bdrv_snapshots();
2365
    if (!bs) {
2366
        monitor_printf(mon, "No available block device supports snapshots\n");
2367
        return;
2368
    }
2369

    
2370
    nb_sns = bdrv_snapshot_list(bs, &sn_tab);
2371
    if (nb_sns < 0) {
2372
        monitor_printf(mon, "bdrv_snapshot_list: error %d\n", nb_sns);
2373
        return;
2374
    }
2375

    
2376
    if (nb_sns == 0) {
2377
        monitor_printf(mon, "There is no snapshot available.\n");
2378
        return;
2379
    }
2380

    
2381
    available_snapshots = g_malloc0(sizeof(int) * nb_sns);
2382
    total = 0;
2383
    for (i = 0; i < nb_sns; i++) {
2384
        sn = &sn_tab[i];
2385
        available = 1;
2386
        bs1 = NULL;
2387

    
2388
        while ((bs1 = bdrv_next(bs1))) {
2389
            if (bdrv_can_snapshot(bs1) && bs1 != bs) {
2390
                ret = bdrv_snapshot_find(bs1, sn_info, sn->id_str);
2391
                if (ret < 0) {
2392
                    available = 0;
2393
                    break;
2394
                }
2395
            }
2396
        }
2397

    
2398
        if (available) {
2399
            available_snapshots[total] = i;
2400
            total++;
2401
        }
2402
    }
2403

    
2404
    if (total > 0) {
2405
        monitor_printf(mon, "%s\n", bdrv_snapshot_dump(buf, sizeof(buf), NULL));
2406
        for (i = 0; i < total; i++) {
2407
            sn = &sn_tab[available_snapshots[i]];
2408
            monitor_printf(mon, "%s\n", bdrv_snapshot_dump(buf, sizeof(buf), sn));
2409
        }
2410
    } else {
2411
        monitor_printf(mon, "There is no suitable snapshot available\n");
2412
    }
2413

    
2414
    g_free(sn_tab);
2415
    g_free(available_snapshots);
2416

    
2417
}
2418

    
2419
void vmstate_register_ram(MemoryRegion *mr, DeviceState *dev)
2420
{
2421
    qemu_ram_set_idstr(memory_region_get_ram_addr(mr) & TARGET_PAGE_MASK,
2422
                       memory_region_name(mr), dev);
2423
}
2424

    
2425
void vmstate_unregister_ram(MemoryRegion *mr, DeviceState *dev)
2426
{
2427
    /* Nothing do to while the implementation is in RAMBlock */
2428
}
2429

    
2430
void vmstate_register_ram_global(MemoryRegion *mr)
2431
{
2432
    vmstate_register_ram(mr, NULL);
2433
}
2434

    
2435
/*
2436
  page = zrun nzrun
2437
       | zrun nzrun page
2438

2439
  zrun = length
2440

2441
  nzrun = length byte...
2442

2443
  length = uleb128 encoded integer
2444
 */
2445
int xbzrle_encode_buffer(uint8_t *old_buf, uint8_t *new_buf, int slen,
2446
                         uint8_t *dst, int dlen)
2447
{
2448
    uint32_t zrun_len = 0, nzrun_len = 0;
2449
    int d = 0, i = 0;
2450
    long res, xor;
2451
    uint8_t *nzrun_start = NULL;
2452

    
2453
    g_assert(!(((uintptr_t)old_buf | (uintptr_t)new_buf | slen) %
2454
               sizeof(long)));
2455

    
2456
    while (i < slen) {
2457
        /* overflow */
2458
        if (d + 2 > dlen) {
2459
            return -1;
2460
        }
2461

    
2462
        /* not aligned to sizeof(long) */
2463
        res = (slen - i) % sizeof(long);
2464
        while (res && old_buf[i] == new_buf[i]) {
2465
            zrun_len++;
2466
            i++;
2467
            res--;
2468
        }
2469

    
2470
        /* word at a time for speed */
2471
        if (!res) {
2472
            while (i < slen &&
2473
                   (*(long *)(old_buf + i)) == (*(long *)(new_buf + i))) {
2474
                i += sizeof(long);
2475
                zrun_len += sizeof(long);
2476
            }
2477

    
2478
            /* go over the rest */
2479
            while (i < slen && old_buf[i] == new_buf[i]) {
2480
                zrun_len++;
2481
                i++;
2482
            }
2483
        }
2484

    
2485
        /* buffer unchanged */
2486
        if (zrun_len == slen) {
2487
            return 0;
2488
        }
2489

    
2490
        /* skip last zero run */
2491
        if (i == slen) {
2492
            return d;
2493
        }
2494

    
2495
        d += uleb128_encode_small(dst + d, zrun_len);
2496

    
2497
        zrun_len = 0;
2498
        nzrun_start = new_buf + i;
2499

    
2500
        /* overflow */
2501
        if (d + 2 > dlen) {
2502
            return -1;
2503
        }
2504
        /* not aligned to sizeof(long) */
2505
        res = (slen - i) % sizeof(long);
2506
        while (res && old_buf[i] != new_buf[i]) {
2507
            i++;
2508
            nzrun_len++;
2509
            res--;
2510
        }
2511

    
2512
        /* word at a time for speed, use of 32-bit long okay */
2513
        if (!res) {
2514
            /* truncation to 32-bit long okay */
2515
            long mask = (long)0x0101010101010101ULL;
2516
            while (i < slen) {
2517
                xor = *(long *)(old_buf + i) ^ *(long *)(new_buf + i);
2518
                if ((xor - mask) & ~xor & (mask << 7)) {
2519
                    /* found the end of an nzrun within the current long */
2520
                    while (old_buf[i] != new_buf[i]) {
2521
                        nzrun_len++;
2522
                        i++;
2523
                    }
2524
                    break;
2525
                } else {
2526
                    i += sizeof(long);
2527
                    nzrun_len += sizeof(long);
2528
                }
2529
            }
2530
        }
2531

    
2532
        d += uleb128_encode_small(dst + d, nzrun_len);
2533
        /* overflow */
2534
        if (d + nzrun_len > dlen) {
2535
            return -1;
2536
        }
2537
        memcpy(dst + d, nzrun_start, nzrun_len);
2538
        d += nzrun_len;
2539
        nzrun_len = 0;
2540
    }
2541

    
2542
    return d;
2543
}
2544

    
2545
int xbzrle_decode_buffer(uint8_t *src, int slen, uint8_t *dst, int dlen)
2546
{
2547
    int i = 0, d = 0;
2548
    int ret;
2549
    uint32_t count = 0;
2550

    
2551
    while (i < slen) {
2552

    
2553
        /* zrun */
2554
        if ((slen - i) < 2) {
2555
            return -1;
2556
        }
2557

    
2558
        ret = uleb128_decode_small(src + i, &count);
2559
        if (ret < 0 || (i && !count)) {
2560
            return -1;
2561
        }
2562
        i += ret;
2563
        d += count;
2564

    
2565
        /* overflow */
2566
        if (d > dlen) {
2567
            return -1;
2568
        }
2569

    
2570
        /* nzrun */
2571
        if ((slen - i) < 2) {
2572
            return -1;
2573
        }
2574

    
2575
        ret = uleb128_decode_small(src + i, &count);
2576
        if (ret < 0 || !count) {
2577
            return -1;
2578
        }
2579
        i += ret;
2580

    
2581
        /* overflow */
2582
        if (d + count > dlen || i + count > slen) {
2583
            return -1;
2584
        }
2585

    
2586
        memcpy(dst + d, src + i, count);
2587
        d += count;
2588
        i += count;
2589
    }
2590

    
2591
    return d;
2592
}