qemu/savevm.c
<<
>>
Prefs
   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 <signal.h>
  27#include <time.h>
  28#include <errno.h>
  29#include <sys/time.h>
  30#include <zlib.h>
  31
  32/* Needed early for CONFIG_BSD etc. */
  33#include "config-host.h"
  34
  35#ifndef _WIN32
  36#include <sys/times.h>
  37#include <sys/wait.h>
  38#include <termios.h>
  39#include <sys/mman.h>
  40#include <sys/ioctl.h>
  41#include <sys/resource.h>
  42#include <sys/socket.h>
  43#include <netinet/in.h>
  44#include <net/if.h>
  45#include <arpa/inet.h>
  46#include <dirent.h>
  47#include <netdb.h>
  48#include <sys/select.h>
  49#ifdef CONFIG_BSD
  50#include <sys/stat.h>
  51#if defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__DragonFly__)
  52#include <libutil.h>
  53#else
  54#include <util.h>
  55#endif
  56#ifdef __linux__
  57#include <pty.h>
  58#include <malloc.h>
  59#include <linux/rtc.h>
  60#endif
  61#endif
  62#endif
  63
  64#ifdef _WIN32
  65#include <windows.h>
  66#include <malloc.h>
  67#include <sys/timeb.h>
  68#include <mmsystem.h>
  69#define getopt_long_only getopt_long
  70#define memalign(align, size) malloc(size)
  71#endif
  72
  73#include "qemu-common.h"
  74#include "hw/hw.h"
  75#include "hw/qdev.h"
  76#include "net.h"
  77#include "monitor.h"
  78#include "sysemu.h"
  79#include "qemu-timer.h"
  80#include "qemu-char.h"
  81#include "audio/audio.h"
  82#include "migration.h"
  83#include "qemu_socket.h"
  84#include "qemu-queue.h"
  85
  86#define SELF_ANNOUNCE_ROUNDS 5
  87
  88#ifndef ETH_P_RARP
  89#define ETH_P_RARP 0x8035
  90#endif
  91#define ARP_HTYPE_ETH 0x0001
  92#define ARP_PTYPE_IP 0x0800
  93#define ARP_OP_REQUEST_REV 0x3
  94
  95static int announce_self_create(uint8_t *buf,
  96                                uint8_t *mac_addr)
  97{
  98    /* Ethernet header. */
  99    memset(buf, 0xff, 6);         /* destination MAC addr */
 100    memcpy(buf + 6, mac_addr, 6); /* source MAC addr */
 101    *(uint16_t *)(buf + 12) = htons(ETH_P_RARP); /* ethertype */
 102
 103    /* RARP header. */
 104    *(uint16_t *)(buf + 14) = htons(ARP_HTYPE_ETH); /* hardware addr space */
 105    *(uint16_t *)(buf + 16) = htons(ARP_PTYPE_IP); /* protocol addr space */
 106    *(buf + 18) = 6; /* hardware addr length (ethernet) */
 107    *(buf + 19) = 4; /* protocol addr length (IPv4) */
 108    *(uint16_t *)(buf + 20) = htons(ARP_OP_REQUEST_REV); /* opcode */
 109    memcpy(buf + 22, mac_addr, 6); /* source hw addr */
 110    memset(buf + 28, 0x00, 4);     /* source protocol addr */
 111    memcpy(buf + 32, mac_addr, 6); /* target hw addr */
 112    memset(buf + 38, 0x00, 4);     /* target protocol addr */
 113
 114    /* Padding to get up to 60 bytes (ethernet min packet size, minus FCS). */
 115    memset(buf + 42, 0x00, 18);
 116
 117    return 60; /* len (FCS will be added by hardware) */
 118}
 119
 120static void qemu_announce_self_iter(NICState *nic, void *opaque)
 121{
 122    uint8_t buf[60];
 123    int len;
 124
 125    len = announce_self_create(buf, nic->conf->macaddr.a);
 126
 127    qemu_send_packet_raw(&nic->nc, buf, len);
 128}
 129
 130
 131static void qemu_announce_self_once(void *opaque)
 132{
 133    static int count = SELF_ANNOUNCE_ROUNDS;
 134    QEMUTimer *timer = *(QEMUTimer **)opaque;
 135
 136    qemu_foreach_nic(qemu_announce_self_iter, NULL);
 137
 138    if (--count) {
 139        /* delay 50ms, 150ms, 250ms, ... */
 140        qemu_mod_timer(timer, qemu_get_clock(rt_clock) +
 141                       50 + (SELF_ANNOUNCE_ROUNDS - count - 1) * 100);
 142    } else {
 143            qemu_del_timer(timer);
 144            qemu_free_timer(timer);
 145    }
 146}
 147
 148void qemu_announce_self(void)
 149{
 150        static QEMUTimer *timer;
 151        timer = qemu_new_timer(rt_clock, qemu_announce_self_once, &timer);
 152        qemu_announce_self_once(&timer);
 153}
 154
 155/***********************************************************/
 156/* savevm/loadvm support */
 157
 158#define IO_BUF_SIZE 32768
 159
 160struct QEMUFile {
 161    QEMUFilePutBufferFunc *put_buffer;
 162    QEMUFileGetBufferFunc *get_buffer;
 163    QEMUFileCloseFunc *close;
 164    QEMUFileRateLimit *rate_limit;
 165    QEMUFileSetRateLimit *set_rate_limit;
 166    QEMUFileGetRateLimit *get_rate_limit;
 167    void *opaque;
 168    int is_write;
 169
 170    int64_t buf_offset; /* start of buffer when writing, end of buffer
 171                           when reading */
 172    int buf_index;
 173    int buf_size; /* 0 when writing */
 174    uint8_t buf[IO_BUF_SIZE];
 175
 176    int has_error;
 177};
 178
 179typedef struct QEMUFileStdio
 180{
 181    FILE *stdio_file;
 182    QEMUFile *file;
 183} QEMUFileStdio;
 184
 185typedef struct QEMUFileSocket
 186{
 187    int fd;
 188    QEMUFile *file;
 189} QEMUFileSocket;
 190
 191static int socket_get_buffer(void *opaque, uint8_t *buf, int64_t pos, int size)
 192{
 193    QEMUFileSocket *s = opaque;
 194    ssize_t len;
 195
 196    do {
 197        len = recv(s->fd, (void *)buf, size, 0);
 198    } while (len == -1 && socket_error() == EINTR);
 199
 200    if (len == -1)
 201        len = -socket_error();
 202
 203    return len;
 204}
 205
 206static int socket_close(void *opaque)
 207{
 208    QEMUFileSocket *s = opaque;
 209    qemu_free(s);
 210    return 0;
 211}
 212
 213static int stdio_put_buffer(void *opaque, const uint8_t *buf, int64_t pos, int size)
 214{
 215    QEMUFileStdio *s = opaque;
 216    return fwrite(buf, 1, size, s->stdio_file);
 217}
 218
 219static int stdio_get_buffer(void *opaque, uint8_t *buf, int64_t pos, int size)
 220{
 221    QEMUFileStdio *s = opaque;
 222    FILE *fp = s->stdio_file;
 223    int bytes;
 224
 225    do {
 226        clearerr(fp);
 227        bytes = fread(buf, 1, size, fp);
 228    } while ((bytes == 0) && ferror(fp) && (errno == EINTR));
 229    return bytes;
 230}
 231
 232static int stdio_pclose(void *opaque)
 233{
 234    QEMUFileStdio *s = opaque;
 235    int ret;
 236    ret = pclose(s->stdio_file);
 237    qemu_free(s);
 238    return ret;
 239}
 240
 241static int stdio_fclose(void *opaque)
 242{
 243    QEMUFileStdio *s = opaque;
 244    fclose(s->stdio_file);
 245    qemu_free(s);
 246    return 0;
 247}
 248
 249QEMUFile *qemu_popen(FILE *stdio_file, const char *mode)
 250{
 251    QEMUFileStdio *s;
 252
 253    if (stdio_file == NULL || mode == NULL || (mode[0] != 'r' && mode[0] != 'w') || mode[1] != 0) {
 254        fprintf(stderr, "qemu_popen: Argument validity check failed\n");
 255        return NULL;
 256    }
 257
 258    s = qemu_mallocz(sizeof(QEMUFileStdio));
 259
 260    s->stdio_file = stdio_file;
 261
 262    if(mode[0] == 'r') {
 263        s->file = qemu_fopen_ops(s, NULL, stdio_get_buffer, stdio_pclose, 
 264                                 NULL, NULL, NULL);
 265    } else {
 266        s->file = qemu_fopen_ops(s, stdio_put_buffer, NULL, stdio_pclose, 
 267                                 NULL, NULL, NULL);
 268    }
 269    return s->file;
 270}
 271
 272QEMUFile *qemu_popen_cmd(const char *command, const char *mode)
 273{
 274    FILE *popen_file;
 275
 276    popen_file = popen(command, mode);
 277    if(popen_file == NULL) {
 278        return NULL;
 279    }
 280
 281    return qemu_popen(popen_file, mode);
 282}
 283
 284int qemu_stdio_fd(QEMUFile *f)
 285{
 286    QEMUFileStdio *p;
 287    int fd;
 288
 289    p = (QEMUFileStdio *)f->opaque;
 290    fd = fileno(p->stdio_file);
 291
 292    return fd;
 293}
 294
 295QEMUFile *qemu_fdopen(int fd, const char *mode)
 296{
 297    QEMUFileStdio *s;
 298
 299    if (mode == NULL ||
 300        (mode[0] != 'r' && mode[0] != 'w') ||
 301        mode[1] != 'b' || mode[2] != 0) {
 302        fprintf(stderr, "qemu_fdopen: Argument validity check failed\n");
 303        return NULL;
 304    }
 305
 306    s = qemu_mallocz(sizeof(QEMUFileStdio));
 307    s->stdio_file = fdopen(fd, mode);
 308    if (!s->stdio_file)
 309        goto fail;
 310
 311    if(mode[0] == 'r') {
 312        s->file = qemu_fopen_ops(s, NULL, stdio_get_buffer, stdio_fclose, 
 313                                 NULL, NULL, NULL);
 314    } else {
 315        s->file = qemu_fopen_ops(s, stdio_put_buffer, NULL, stdio_fclose, 
 316                                 NULL, NULL, NULL);
 317    }
 318    return s->file;
 319
 320fail:
 321    qemu_free(s);
 322    return NULL;
 323}
 324
 325QEMUFile *qemu_fopen_socket(int fd)
 326{
 327    QEMUFileSocket *s = qemu_mallocz(sizeof(QEMUFileSocket));
 328
 329    s->fd = fd;
 330    s->file = qemu_fopen_ops(s, NULL, socket_get_buffer, socket_close, 
 331                             NULL, NULL, NULL);
 332    return s->file;
 333}
 334
 335static int file_put_buffer(void *opaque, const uint8_t *buf,
 336                            int64_t pos, int size)
 337{
 338    QEMUFileStdio *s = opaque;
 339    fseek(s->stdio_file, pos, SEEK_SET);
 340    return fwrite(buf, 1, size, s->stdio_file);
 341}
 342
 343static int file_get_buffer(void *opaque, uint8_t *buf, int64_t pos, int size)
 344{
 345    QEMUFileStdio *s = opaque;
 346    fseek(s->stdio_file, pos, SEEK_SET);
 347    return fread(buf, 1, size, s->stdio_file);
 348}
 349
 350QEMUFile *qemu_fopen(const char *filename, const char *mode)
 351{
 352    QEMUFileStdio *s;
 353
 354    if (mode == NULL ||
 355        (mode[0] != 'r' && mode[0] != 'w') ||
 356        mode[1] != 'b' || mode[2] != 0) {
 357        fprintf(stderr, "qemu_fopen: Argument validity check failed\n");
 358        return NULL;
 359    }
 360
 361    s = qemu_mallocz(sizeof(QEMUFileStdio));
 362
 363    s->stdio_file = fopen(filename, mode);
 364    if (!s->stdio_file)
 365        goto fail;
 366    
 367    if(mode[0] == 'w') {
 368        s->file = qemu_fopen_ops(s, file_put_buffer, NULL, stdio_fclose, 
 369                                 NULL, NULL, NULL);
 370    } else {
 371        s->file = qemu_fopen_ops(s, NULL, file_get_buffer, stdio_fclose, 
 372                               NULL, NULL, NULL);
 373    }
 374    return s->file;
 375fail:
 376    qemu_free(s);
 377    return NULL;
 378}
 379
 380static int block_put_buffer(void *opaque, const uint8_t *buf,
 381                           int64_t pos, int size)
 382{
 383    bdrv_save_vmstate(opaque, buf, pos, size);
 384    return size;
 385}
 386
 387static int block_get_buffer(void *opaque, uint8_t *buf, int64_t pos, int size)
 388{
 389    return bdrv_load_vmstate(opaque, buf, pos, size);
 390}
 391
 392static int bdrv_fclose(void *opaque)
 393{
 394    return 0;
 395}
 396
 397static QEMUFile *qemu_fopen_bdrv(BlockDriverState *bs, int is_writable)
 398{
 399    if (is_writable)
 400        return qemu_fopen_ops(bs, block_put_buffer, NULL, bdrv_fclose, 
 401                              NULL, NULL, NULL);
 402    return qemu_fopen_ops(bs, NULL, block_get_buffer, bdrv_fclose, NULL, NULL, NULL);
 403}
 404
 405QEMUFile *qemu_fopen_ops(void *opaque, QEMUFilePutBufferFunc *put_buffer,
 406                         QEMUFileGetBufferFunc *get_buffer,
 407                         QEMUFileCloseFunc *close,
 408                         QEMUFileRateLimit *rate_limit,
 409                         QEMUFileSetRateLimit *set_rate_limit,
 410                         QEMUFileGetRateLimit *get_rate_limit)
 411{
 412    QEMUFile *f;
 413
 414    f = qemu_mallocz(sizeof(QEMUFile));
 415
 416    f->opaque = opaque;
 417    f->put_buffer = put_buffer;
 418    f->get_buffer = get_buffer;
 419    f->close = close;
 420    f->rate_limit = rate_limit;
 421    f->set_rate_limit = set_rate_limit;
 422    f->get_rate_limit = get_rate_limit;
 423    f->is_write = 0;
 424
 425    return f;
 426}
 427
 428int qemu_file_has_error(QEMUFile *f)
 429{
 430    return f->has_error;
 431}
 432
 433void qemu_file_set_error(QEMUFile *f)
 434{
 435    f->has_error = 1;
 436}
 437
 438void qemu_fflush(QEMUFile *f)
 439{
 440    if (!f->put_buffer)
 441        return;
 442
 443    if (f->is_write && f->buf_index > 0) {
 444        int len;
 445
 446        len = f->put_buffer(f->opaque, f->buf, f->buf_offset, f->buf_index);
 447        if (len > 0)
 448            f->buf_offset += f->buf_index;
 449        else
 450            f->has_error = 1;
 451        f->buf_index = 0;
 452    }
 453}
 454
 455static void qemu_fill_buffer(QEMUFile *f)
 456{
 457    int len;
 458
 459    if (!f->get_buffer)
 460        return;
 461
 462    if (f->is_write)
 463        abort();
 464
 465    len = f->get_buffer(f->opaque, f->buf, f->buf_offset, IO_BUF_SIZE);
 466    if (len > 0) {
 467        f->buf_index = 0;
 468        f->buf_size = len;
 469        f->buf_offset += len;
 470    } else if (len != -EAGAIN)
 471        f->has_error = 1;
 472}
 473
 474int qemu_fclose(QEMUFile *f)
 475{
 476    int ret = 0;
 477    qemu_fflush(f);
 478    if (f->close)
 479        ret = f->close(f->opaque);
 480    qemu_free(f);
 481    return ret;
 482}
 483
 484void qemu_file_put_notify(QEMUFile *f)
 485{
 486    f->put_buffer(f->opaque, NULL, 0, 0);
 487}
 488
 489void qemu_put_buffer(QEMUFile *f, const uint8_t *buf, int size)
 490{
 491    int l;
 492
 493    if (!f->has_error && f->is_write == 0 && f->buf_index > 0) {
 494        fprintf(stderr,
 495                "Attempted to write to buffer while read buffer is not empty\n");
 496        abort();
 497    }
 498
 499    while (!f->has_error && size > 0) {
 500        l = IO_BUF_SIZE - f->buf_index;
 501        if (l > size)
 502            l = size;
 503        memcpy(f->buf + f->buf_index, buf, l);
 504        f->is_write = 1;
 505        f->buf_index += l;
 506        buf += l;
 507        size -= l;
 508        if (f->buf_index >= IO_BUF_SIZE)
 509            qemu_fflush(f);
 510    }
 511}
 512
 513void qemu_put_byte(QEMUFile *f, int v)
 514{
 515    if (!f->has_error && f->is_write == 0 && f->buf_index > 0) {
 516        fprintf(stderr,
 517                "Attempted to write to buffer while read buffer is not empty\n");
 518        abort();
 519    }
 520
 521    f->buf[f->buf_index++] = v;
 522    f->is_write = 1;
 523    if (f->buf_index >= IO_BUF_SIZE)
 524        qemu_fflush(f);
 525}
 526
 527int qemu_get_buffer(QEMUFile *f, uint8_t *buf, int size1)
 528{
 529    int size, l;
 530
 531    if (f->is_write)
 532        abort();
 533
 534    size = size1;
 535    while (size > 0) {
 536        l = f->buf_size - f->buf_index;
 537        if (l == 0) {
 538            qemu_fill_buffer(f);
 539            l = f->buf_size - f->buf_index;
 540            if (l == 0)
 541                break;
 542        }
 543        if (l > size)
 544            l = size;
 545        memcpy(buf, f->buf + f->buf_index, l);
 546        f->buf_index += l;
 547        buf += l;
 548        size -= l;
 549    }
 550    return size1 - size;
 551}
 552
 553static int qemu_peek_byte(QEMUFile *f)
 554{
 555    if (f->is_write)
 556        abort();
 557
 558    if (f->buf_index >= f->buf_size) {
 559        qemu_fill_buffer(f);
 560        if (f->buf_index >= f->buf_size)
 561            return 0;
 562    }
 563    return f->buf[f->buf_index];
 564}
 565
 566int qemu_get_byte(QEMUFile *f)
 567{
 568    if (f->is_write)
 569        abort();
 570
 571    if (f->buf_index >= f->buf_size) {
 572        qemu_fill_buffer(f);
 573        if (f->buf_index >= f->buf_size)
 574            return 0;
 575    }
 576    return f->buf[f->buf_index++];
 577}
 578
 579int64_t qemu_ftell(QEMUFile *f)
 580{
 581    return f->buf_offset - f->buf_size + f->buf_index;
 582}
 583
 584int64_t qemu_fseek(QEMUFile *f, int64_t pos, int whence)
 585{
 586    if (whence == SEEK_SET) {
 587        /* nothing to do */
 588    } else if (whence == SEEK_CUR) {
 589        pos += qemu_ftell(f);
 590    } else {
 591        /* SEEK_END not supported */
 592        return -1;
 593    }
 594    if (f->put_buffer) {
 595        qemu_fflush(f);
 596        f->buf_offset = pos;
 597    } else {
 598        f->buf_offset = pos;
 599        f->buf_index = 0;
 600        f->buf_size = 0;
 601    }
 602    return pos;
 603}
 604
 605int qemu_file_rate_limit(QEMUFile *f)
 606{
 607    if (f->rate_limit)
 608        return f->rate_limit(f->opaque);
 609
 610    return 0;
 611}
 612
 613int64_t qemu_file_get_rate_limit(QEMUFile *f)
 614{
 615    if (f->get_rate_limit)
 616        return f->get_rate_limit(f->opaque);
 617
 618    return 0;
 619}
 620
 621int64_t qemu_file_set_rate_limit(QEMUFile *f, int64_t new_rate)
 622{
 623    /* any failed or completed migration keeps its state to allow probing of
 624     * migration data, but has no associated file anymore */
 625    if (f && f->set_rate_limit)
 626        return f->set_rate_limit(f->opaque, new_rate);
 627
 628    return 0;
 629}
 630
 631void qemu_put_be16(QEMUFile *f, unsigned int v)
 632{
 633    qemu_put_byte(f, v >> 8);
 634    qemu_put_byte(f, v);
 635}
 636
 637void qemu_put_be32(QEMUFile *f, unsigned int v)
 638{
 639    qemu_put_byte(f, v >> 24);
 640    qemu_put_byte(f, v >> 16);
 641    qemu_put_byte(f, v >> 8);
 642    qemu_put_byte(f, v);
 643}
 644
 645void qemu_put_be64(QEMUFile *f, uint64_t v)
 646{
 647    qemu_put_be32(f, v >> 32);
 648    qemu_put_be32(f, v);
 649}
 650
 651unsigned int qemu_get_be16(QEMUFile *f)
 652{
 653    unsigned int v;
 654    v = qemu_get_byte(f) << 8;
 655    v |= qemu_get_byte(f);
 656    return v;
 657}
 658
 659unsigned int qemu_get_be32(QEMUFile *f)
 660{
 661    unsigned int v;
 662    v = qemu_get_byte(f) << 24;
 663    v |= qemu_get_byte(f) << 16;
 664    v |= qemu_get_byte(f) << 8;
 665    v |= qemu_get_byte(f);
 666    return v;
 667}
 668
 669uint64_t qemu_get_be64(QEMUFile *f)
 670{
 671    uint64_t v;
 672    v = (uint64_t)qemu_get_be32(f) << 32;
 673    v |= qemu_get_be32(f);
 674    return v;
 675}
 676
 677/* bool */
 678
 679static int get_bool(QEMUFile *f, void *pv, size_t size)
 680{
 681    bool *v = pv;
 682    *v = qemu_get_byte(f);
 683    return 0;
 684}
 685
 686static void put_bool(QEMUFile *f, void *pv, size_t size)
 687{
 688    bool *v = pv;
 689    qemu_put_byte(f, *v);
 690}
 691
 692const VMStateInfo vmstate_info_bool = {
 693    .name = "bool",
 694    .get  = get_bool,
 695    .put  = put_bool,
 696};
 697
 698/* 8 bit int */
 699
 700static int get_int8(QEMUFile *f, void *pv, size_t size)
 701{
 702    int8_t *v = pv;
 703    qemu_get_s8s(f, v);
 704    return 0;
 705}
 706
 707static void put_int8(QEMUFile *f, void *pv, size_t size)
 708{
 709    int8_t *v = pv;
 710    qemu_put_s8s(f, v);
 711}
 712
 713const VMStateInfo vmstate_info_int8 = {
 714    .name = "int8",
 715    .get  = get_int8,
 716    .put  = put_int8,
 717};
 718
 719/* 16 bit int */
 720
 721static int get_int16(QEMUFile *f, void *pv, size_t size)
 722{
 723    int16_t *v = pv;
 724    qemu_get_sbe16s(f, v);
 725    return 0;
 726}
 727
 728static void put_int16(QEMUFile *f, void *pv, size_t size)
 729{
 730    int16_t *v = pv;
 731    qemu_put_sbe16s(f, v);
 732}
 733
 734const VMStateInfo vmstate_info_int16 = {
 735    .name = "int16",
 736    .get  = get_int16,
 737    .put  = put_int16,
 738};
 739
 740/* 32 bit int */
 741
 742static int get_int32(QEMUFile *f, void *pv, size_t size)
 743{
 744    int32_t *v = pv;
 745    qemu_get_sbe32s(f, v);
 746    return 0;
 747}
 748
 749static void put_int32(QEMUFile *f, void *pv, size_t size)
 750{
 751    int32_t *v = pv;
 752    qemu_put_sbe32s(f, v);
 753}
 754
 755const VMStateInfo vmstate_info_int32 = {
 756    .name = "int32",
 757    .get  = get_int32,
 758    .put  = put_int32,
 759};
 760
 761/* 32 bit int. See that the received value is the same than the one
 762   in the field */
 763
 764static int get_int32_equal(QEMUFile *f, void *pv, size_t size)
 765{
 766    int32_t *v = pv;
 767    int32_t v2;
 768    qemu_get_sbe32s(f, &v2);
 769
 770    if (*v == v2)
 771        return 0;
 772    return -EINVAL;
 773}
 774
 775const VMStateInfo vmstate_info_int32_equal = {
 776    .name = "int32 equal",
 777    .get  = get_int32_equal,
 778    .put  = put_int32,
 779};
 780
 781/* 32 bit int. See that the received value is the less or the same
 782   than the one in the field */
 783
 784static int get_int32_le(QEMUFile *f, void *pv, size_t size)
 785{
 786    int32_t *old = pv;
 787    int32_t new;
 788    qemu_get_sbe32s(f, &new);
 789
 790    if (*old <= new)
 791        return 0;
 792    return -EINVAL;
 793}
 794
 795const VMStateInfo vmstate_info_int32_le = {
 796    .name = "int32 equal",
 797    .get  = get_int32_le,
 798    .put  = put_int32,
 799};
 800
 801/* 64 bit int */
 802
 803static int get_int64(QEMUFile *f, void *pv, size_t size)
 804{
 805    int64_t *v = pv;
 806    qemu_get_sbe64s(f, v);
 807    return 0;
 808}
 809
 810static void put_int64(QEMUFile *f, void *pv, size_t size)
 811{
 812    int64_t *v = pv;
 813    qemu_put_sbe64s(f, v);
 814}
 815
 816const VMStateInfo vmstate_info_int64 = {
 817    .name = "int64",
 818    .get  = get_int64,
 819    .put  = put_int64,
 820};
 821
 822/* 8 bit unsigned int */
 823
 824static int get_uint8(QEMUFile *f, void *pv, size_t size)
 825{
 826    uint8_t *v = pv;
 827    qemu_get_8s(f, v);
 828    return 0;
 829}
 830
 831static void put_uint8(QEMUFile *f, void *pv, size_t size)
 832{
 833    uint8_t *v = pv;
 834    qemu_put_8s(f, v);
 835}
 836
 837const VMStateInfo vmstate_info_uint8 = {
 838    .name = "uint8",
 839    .get  = get_uint8,
 840    .put  = put_uint8,
 841};
 842
 843/* 16 bit unsigned int */
 844
 845static int get_uint16(QEMUFile *f, void *pv, size_t size)
 846{
 847    uint16_t *v = pv;
 848    qemu_get_be16s(f, v);
 849    return 0;
 850}
 851
 852static void put_uint16(QEMUFile *f, void *pv, size_t size)
 853{
 854    uint16_t *v = pv;
 855    qemu_put_be16s(f, v);
 856}
 857
 858const VMStateInfo vmstate_info_uint16 = {
 859    .name = "uint16",
 860    .get  = get_uint16,
 861    .put  = put_uint16,
 862};
 863
 864/* 32 bit unsigned int */
 865
 866static int get_uint32(QEMUFile *f, void *pv, size_t size)
 867{
 868    uint32_t *v = pv;
 869    qemu_get_be32s(f, v);
 870    return 0;
 871}
 872
 873static void put_uint32(QEMUFile *f, void *pv, size_t size)
 874{
 875    uint32_t *v = pv;
 876    qemu_put_be32s(f, v);
 877}
 878
 879const VMStateInfo vmstate_info_uint32 = {
 880    .name = "uint32",
 881    .get  = get_uint32,
 882    .put  = put_uint32,
 883};
 884
 885/* 64 bit unsigned int */
 886
 887static int get_uint64(QEMUFile *f, void *pv, size_t size)
 888{
 889    uint64_t *v = pv;
 890    qemu_get_be64s(f, v);
 891    return 0;
 892}
 893
 894static void put_uint64(QEMUFile *f, void *pv, size_t size)
 895{
 896    uint64_t *v = pv;
 897    qemu_put_be64s(f, v);
 898}
 899
 900const VMStateInfo vmstate_info_uint64 = {
 901    .name = "uint64",
 902    .get  = get_uint64,
 903    .put  = put_uint64,
 904};
 905
 906/* 8 bit int. See that the received value is the same than the one
 907   in the field */
 908
 909static int get_uint8_equal(QEMUFile *f, void *pv, size_t size)
 910{
 911    uint8_t *v = pv;
 912    uint8_t v2;
 913    qemu_get_8s(f, &v2);
 914
 915    if (*v == v2)
 916        return 0;
 917    return -EINVAL;
 918}
 919
 920const VMStateInfo vmstate_info_uint8_equal = {
 921    .name = "uint8 equal",
 922    .get  = get_uint8_equal,
 923    .put  = put_uint8,
 924};
 925
 926/* 16 bit unsigned int int. See that the received value is the same than the one
 927   in the field */
 928
 929static int get_uint16_equal(QEMUFile *f, void *pv, size_t size)
 930{
 931    uint16_t *v = pv;
 932    uint16_t v2;
 933    qemu_get_be16s(f, &v2);
 934
 935    if (*v == v2)
 936        return 0;
 937    return -EINVAL;
 938}
 939
 940const VMStateInfo vmstate_info_uint16_equal = {
 941    .name = "uint16 equal",
 942    .get  = get_uint16_equal,
 943    .put  = put_uint16,
 944};
 945
 946/* timers  */
 947
 948static int get_timer(QEMUFile *f, void *pv, size_t size)
 949{
 950    QEMUTimer *v = pv;
 951    qemu_get_timer(f, v);
 952    return 0;
 953}
 954
 955static void put_timer(QEMUFile *f, void *pv, size_t size)
 956{
 957    QEMUTimer *v = pv;
 958    qemu_put_timer(f, v);
 959}
 960
 961const VMStateInfo vmstate_info_timer = {
 962    .name = "timer",
 963    .get  = get_timer,
 964    .put  = put_timer,
 965};
 966
 967/* uint8_t buffers */
 968
 969static int get_buffer(QEMUFile *f, void *pv, size_t size)
 970{
 971    uint8_t *v = pv;
 972    qemu_get_buffer(f, v, size);
 973    return 0;
 974}
 975
 976static void put_buffer(QEMUFile *f, void *pv, size_t size)
 977{
 978    uint8_t *v = pv;
 979    qemu_put_buffer(f, v, size);
 980}
 981
 982const VMStateInfo vmstate_info_buffer = {
 983    .name = "buffer",
 984    .get  = get_buffer,
 985    .put  = put_buffer,
 986};
 987
 988/* unused buffers: space that was used for some fields that are
 989   not usefull anymore */
 990
 991static int get_unused_buffer(QEMUFile *f, void *pv, size_t size)
 992{
 993    uint8_t buf[1024];
 994    int block_len;
 995
 996    while (size > 0) {
 997        block_len = MIN(sizeof(buf), size);
 998        size -= block_len;
 999        qemu_get_buffer(f, buf, block_len);
1000    }
1001   return 0;
1002}
1003
1004static void put_unused_buffer(QEMUFile *f, void *pv, size_t size)
1005{
1006    static const uint8_t buf[1024];
1007    int block_len;
1008
1009    while (size > 0) {
1010        block_len = MIN(sizeof(buf), size);
1011        size -= block_len;
1012        qemu_put_buffer(f, buf, block_len);
1013    }
1014}
1015
1016const VMStateInfo vmstate_info_unused_buffer = {
1017    .name = "unused_buffer",
1018    .get  = get_unused_buffer,
1019    .put  = put_unused_buffer,
1020};
1021
1022typedef struct CompatEntry {
1023    char idstr[256];
1024    int instance_id;
1025} CompatEntry;
1026
1027typedef struct SaveStateEntry {
1028    QTAILQ_ENTRY(SaveStateEntry) entry;
1029    char idstr[256];
1030    int instance_id;
1031    int alias_id;
1032    int version_id;
1033    int section_id;
1034    SaveSetParamsHandler *set_params;
1035    SaveLiveStateHandler *save_live_state;
1036    SaveStateHandler *save_state;
1037    LoadStateHandler *load_state;
1038    const VMStateDescription *vmsd;
1039    void *opaque;
1040    CompatEntry *compat;
1041    int no_migrate;
1042} SaveStateEntry;
1043
1044
1045static QTAILQ_HEAD(savevm_handlers, SaveStateEntry) savevm_handlers =
1046    QTAILQ_HEAD_INITIALIZER(savevm_handlers);
1047static int global_section_id;
1048
1049static int calculate_new_instance_id(const char *idstr)
1050{
1051    SaveStateEntry *se;
1052    int instance_id = 0;
1053
1054    QTAILQ_FOREACH(se, &savevm_handlers, entry) {
1055        if (strcmp(idstr, se->idstr) == 0
1056            && instance_id <= se->instance_id) {
1057            instance_id = se->instance_id + 1;
1058        }
1059    }
1060    return instance_id;
1061}
1062
1063static int calculate_compat_instance_id(const char *idstr)
1064{
1065    SaveStateEntry *se;
1066    int instance_id = 0;
1067
1068    QTAILQ_FOREACH(se, &savevm_handlers, entry) {
1069        if (!se->compat)
1070            continue;
1071
1072        if (strcmp(idstr, se->compat->idstr) == 0
1073            && instance_id <= se->compat->instance_id) {
1074            instance_id = se->compat->instance_id + 1;
1075        }
1076    }
1077    return instance_id;
1078}
1079
1080/* TODO: Individual devices generally have very little idea about the rest
1081   of the system, so instance_id should be removed/replaced.
1082   Meanwhile pass -1 as instance_id if you do not already have a clearly
1083   distinguishing id for all instances of your device class. */
1084int register_savevm_live(DeviceState *dev,
1085                         const char *idstr,
1086                         int instance_id,
1087                         int version_id,
1088                         SaveSetParamsHandler *set_params,
1089                         SaveLiveStateHandler *save_live_state,
1090                         SaveStateHandler *save_state,
1091                         LoadStateHandler *load_state,
1092                         void *opaque)
1093{
1094    SaveStateEntry *se;
1095
1096    se = qemu_mallocz(sizeof(SaveStateEntry));
1097    se->version_id = version_id;
1098    se->section_id = global_section_id++;
1099    se->set_params = set_params;
1100    se->save_live_state = save_live_state;
1101    se->save_state = save_state;
1102    se->load_state = load_state;
1103    se->opaque = opaque;
1104    se->vmsd = NULL;
1105    se->no_migrate = 0;
1106
1107    if (dev && dev->parent_bus && dev->parent_bus->info->get_dev_path) {
1108        char *id = dev->parent_bus->info->get_dev_path(dev);
1109        if (id) {
1110            pstrcpy(se->idstr, sizeof(se->idstr), id);
1111            pstrcat(se->idstr, sizeof(se->idstr), "/");
1112            qemu_free(id);
1113
1114            se->compat = qemu_mallocz(sizeof(CompatEntry));
1115            pstrcpy(se->compat->idstr, sizeof(se->compat->idstr), idstr);
1116            se->compat->instance_id = instance_id == -1 ?
1117                         calculate_compat_instance_id(idstr) : instance_id;
1118            instance_id = -1;
1119        }
1120    }
1121    pstrcat(se->idstr, sizeof(se->idstr), idstr);
1122
1123    if (instance_id == -1) {
1124        se->instance_id = calculate_new_instance_id(se->idstr);
1125    } else {
1126        se->instance_id = instance_id;
1127    }
1128    assert(!se->compat || se->instance_id == 0);
1129    /* add at the end of list */
1130    QTAILQ_INSERT_TAIL(&savevm_handlers, se, entry);
1131    return 0;
1132}
1133
1134int register_savevm(DeviceState *dev,
1135                    const char *idstr,
1136                    int instance_id,
1137                    int version_id,
1138                    SaveStateHandler *save_state,
1139                    LoadStateHandler *load_state,
1140                    void *opaque)
1141{
1142    return register_savevm_live(dev, idstr, instance_id, version_id,
1143                                NULL, NULL, save_state, load_state, opaque);
1144}
1145
1146void unregister_savevm(DeviceState *dev, const char *idstr, void *opaque)
1147{
1148    SaveStateEntry *se, *new_se;
1149    char id[256] = "";
1150
1151    if (dev && dev->parent_bus && dev->parent_bus->info->get_dev_path) {
1152        char *path = dev->parent_bus->info->get_dev_path(dev);
1153        if (path) {
1154            pstrcpy(id, sizeof(id), path);
1155            pstrcat(id, sizeof(id), "/");
1156            qemu_free(path);
1157        }
1158    }
1159    pstrcat(id, sizeof(id), idstr);
1160
1161    QTAILQ_FOREACH_SAFE(se, &savevm_handlers, entry, new_se) {
1162        if (strcmp(se->idstr, id) == 0 && se->opaque == opaque) {
1163            QTAILQ_REMOVE(&savevm_handlers, se, entry);
1164            if (se->compat) {
1165                qemu_free(se->compat);
1166            }
1167            qemu_free(se);
1168        }
1169    }
1170}
1171
1172/* mark a device as not to be migrated, that is the device should be
1173   unplugged before migration */
1174void register_device_unmigratable(DeviceState *dev, const char *idstr,
1175                                                            void *opaque)
1176{
1177    SaveStateEntry *se;
1178    char id[256] = "";
1179
1180    if (dev && dev->parent_bus && dev->parent_bus->info->get_dev_path) {
1181        char *path = dev->parent_bus->info->get_dev_path(dev);
1182        if (path) {
1183            pstrcpy(id, sizeof(id), path);
1184            pstrcat(id, sizeof(id), "/");
1185            qemu_free(path);
1186        }
1187    }
1188    pstrcat(id, sizeof(id), idstr);
1189
1190    QTAILQ_FOREACH(se, &savevm_handlers, entry) {
1191        if (strcmp(se->idstr, id) == 0 && se->opaque == opaque) {
1192            se->no_migrate = 1;
1193        }
1194    }
1195}
1196
1197int vmstate_register_with_alias_id(DeviceState *dev, int instance_id,
1198                                   const VMStateDescription *vmsd,
1199                                   void *opaque, int alias_id,
1200                                   int required_for_version)
1201{
1202    SaveStateEntry *se;
1203
1204    /* If this triggers, alias support can be dropped for the vmsd. */
1205    assert(alias_id == -1 || required_for_version >= vmsd->minimum_version_id);
1206
1207    se = qemu_mallocz(sizeof(SaveStateEntry));
1208    se->version_id = vmsd->version_id;
1209    se->section_id = global_section_id++;
1210    se->save_live_state = NULL;
1211    se->save_state = NULL;
1212    se->load_state = NULL;
1213    se->opaque = opaque;
1214    se->vmsd = vmsd;
1215    se->alias_id = alias_id;
1216
1217    if (dev && dev->parent_bus && dev->parent_bus->info->get_dev_path) {
1218        char *id = dev->parent_bus->info->get_dev_path(dev);
1219        if (id) {
1220            pstrcpy(se->idstr, sizeof(se->idstr), id);
1221            pstrcat(se->idstr, sizeof(se->idstr), "/");
1222            qemu_free(id);
1223
1224            se->compat = qemu_mallocz(sizeof(CompatEntry));
1225            pstrcpy(se->compat->idstr, sizeof(se->compat->idstr), vmsd->name);
1226            se->compat->instance_id = instance_id == -1 ?
1227                         calculate_compat_instance_id(vmsd->name) : instance_id;
1228            instance_id = -1;
1229        }
1230    }
1231    pstrcat(se->idstr, sizeof(se->idstr), vmsd->name);
1232
1233    if (instance_id == -1) {
1234        se->instance_id = calculate_new_instance_id(se->idstr);
1235    } else {
1236        se->instance_id = instance_id;
1237    }
1238    assert(!se->compat || se->instance_id == 0);
1239    /* add at the end of list */
1240    QTAILQ_INSERT_TAIL(&savevm_handlers, se, entry);
1241    return 0;
1242}
1243
1244int vmstate_register(DeviceState *dev, int instance_id,
1245                     const VMStateDescription *vmsd, void *opaque)
1246{
1247    return vmstate_register_with_alias_id(dev, instance_id, vmsd,
1248                                          opaque, -1, 0);
1249}
1250
1251void vmstate_unregister(DeviceState *dev, const VMStateDescription *vmsd,
1252                        void *opaque)
1253{
1254    SaveStateEntry *se, *new_se;
1255
1256    QTAILQ_FOREACH_SAFE(se, &savevm_handlers, entry, new_se) {
1257        if (se->vmsd == vmsd && se->opaque == opaque) {
1258            QTAILQ_REMOVE(&savevm_handlers, se, entry);
1259            if (se->compat) {
1260                qemu_free(se->compat);
1261            }
1262            qemu_free(se);
1263        }
1264    }
1265}
1266
1267static void vmstate_subsection_save(QEMUFile *f, const VMStateDescription *vmsd,
1268                                    void *opaque);
1269static int vmstate_subsection_load(QEMUFile *f, const VMStateDescription *vmsd,
1270                                   void *opaque);
1271
1272int vmstate_load_state(QEMUFile *f, const VMStateDescription *vmsd,
1273                       void *opaque, int version_id)
1274{
1275    VMStateField *field = vmsd->fields;
1276    int ret;
1277
1278    if (version_id > vmsd->version_id) {
1279        return -EINVAL;
1280    }
1281    if (version_id < vmsd->minimum_version_id_old) {
1282        return -EINVAL;
1283    }
1284    if  (version_id < vmsd->minimum_version_id) {
1285        return vmsd->load_state_old(f, opaque, version_id);
1286    }
1287    if (vmsd->pre_load) {
1288        int ret = vmsd->pre_load(opaque);
1289        if (ret)
1290            return ret;
1291    }
1292    while(field->name) {
1293        if ((field->field_exists &&
1294             field->field_exists(opaque, version_id)) ||
1295            (!field->field_exists &&
1296             field->version_id <= version_id)) {
1297            void *base_addr = opaque + field->offset;
1298            int i, n_elems = 1;
1299            int size = field->size;
1300
1301            if (field->flags & VMS_VBUFFER) {
1302                size = *(int32_t *)(opaque+field->size_offset);
1303                if (field->flags & VMS_MULTIPLY) {
1304                    size *= field->size;
1305                }
1306            }
1307            if (field->flags & VMS_ARRAY) {
1308                n_elems = field->num;
1309            } else if (field->flags & VMS_VARRAY_INT32) {
1310                n_elems = *(int32_t *)(opaque+field->num_offset);
1311            } else if (field->flags & VMS_VARRAY_UINT16) {
1312                n_elems = *(uint16_t *)(opaque+field->num_offset);
1313            }
1314            if (field->flags & VMS_POINTER) {
1315                base_addr = *(void **)base_addr + field->start;
1316            }
1317            for (i = 0; i < n_elems; i++) {
1318                void *addr = base_addr + size * i;
1319
1320                if (field->flags & VMS_ARRAY_OF_POINTER) {
1321                    addr = *(void **)addr;
1322                }
1323                if (field->flags & VMS_STRUCT) {
1324                    ret = vmstate_load_state(f, field->vmsd, addr, field->vmsd->version_id);
1325                } else {
1326                    ret = field->info->get(f, addr, size);
1327
1328                }
1329                if (ret < 0) {
1330                    return ret;
1331                }
1332            }
1333        }
1334        field++;
1335    }
1336    ret = vmstate_subsection_load(f, vmsd, opaque);
1337    if (ret != 0) {
1338        return ret;
1339    }
1340    if (vmsd->post_load) {
1341        return vmsd->post_load(opaque, version_id);
1342    }
1343    return 0;
1344}
1345
1346void vmstate_save_state(QEMUFile *f, const VMStateDescription *vmsd,
1347                        void *opaque)
1348{
1349    VMStateField *field = vmsd->fields;
1350
1351    if (vmsd->pre_save) {
1352        vmsd->pre_save(opaque);
1353    }
1354    while(field->name) {
1355        if (!field->field_exists ||
1356            field->field_exists(opaque, vmsd->version_id)) {
1357            void *base_addr = opaque + field->offset;
1358            int i, n_elems = 1;
1359            int size = field->size;
1360
1361            if (field->flags & VMS_VBUFFER) {
1362                size = *(int32_t *)(opaque+field->size_offset);
1363                if (field->flags & VMS_MULTIPLY) {
1364                    size *= field->size;
1365                }
1366            }
1367            if (field->flags & VMS_ARRAY) {
1368                n_elems = field->num;
1369            } else if (field->flags & VMS_VARRAY_INT32) {
1370                n_elems = *(int32_t *)(opaque+field->num_offset);
1371            } else if (field->flags & VMS_VARRAY_UINT16) {
1372                n_elems = *(uint16_t *)(opaque+field->num_offset);
1373            }
1374            if (field->flags & VMS_POINTER) {
1375                base_addr = *(void **)base_addr + field->start;
1376            }
1377            for (i = 0; i < n_elems; i++) {
1378                void *addr = base_addr + size * i;
1379
1380                if (field->flags & VMS_ARRAY_OF_POINTER) {
1381                    addr = *(void **)addr;
1382                }
1383                if (field->flags & VMS_STRUCT) {
1384                    vmstate_save_state(f, field->vmsd, addr);
1385                } else {
1386                    field->info->put(f, addr, size);
1387                }
1388            }
1389        }
1390        field++;
1391    }
1392    vmstate_subsection_save(f, vmsd, opaque);
1393}
1394
1395static int vmstate_load(QEMUFile *f, SaveStateEntry *se, int version_id)
1396{
1397    if (!se->vmsd) {         /* Old style */
1398        return se->load_state(f, se->opaque, version_id);
1399    }
1400    return vmstate_load_state(f, se->vmsd, se->opaque, version_id);
1401}
1402
1403static void vmstate_save(QEMUFile *f, SaveStateEntry *se)
1404{
1405    if (!se->vmsd) {         /* Old style */
1406        se->save_state(f, se->opaque);
1407        return;
1408    }
1409    vmstate_save_state(f,se->vmsd, se->opaque);
1410}
1411
1412#define QEMU_VM_FILE_MAGIC           0x5145564d
1413#define QEMU_VM_FILE_VERSION_COMPAT  0x00000002
1414#define QEMU_VM_FILE_VERSION         0x00000003
1415
1416#define QEMU_VM_EOF                  0x00
1417#define QEMU_VM_SECTION_START        0x01
1418#define QEMU_VM_SECTION_PART         0x02
1419#define QEMU_VM_SECTION_END          0x03
1420#define QEMU_VM_SECTION_FULL         0x04
1421#define QEMU_VM_SUBSECTION           0x05
1422
1423bool qemu_savevm_state_blocked(Monitor *mon)
1424{
1425    SaveStateEntry *se;
1426
1427    QTAILQ_FOREACH(se, &savevm_handlers, entry) {
1428        if (se->no_migrate) {
1429            monitor_printf(mon, "state blocked by non-migratable device '%s'\n",
1430                           se->idstr);
1431            return true;
1432        }
1433    }
1434    return false;
1435}
1436
1437int qemu_savevm_state_begin(Monitor *mon, QEMUFile *f, int blk_enable,
1438                            int shared)
1439{
1440    SaveStateEntry *se;
1441
1442    QTAILQ_FOREACH(se, &savevm_handlers, entry) {
1443        if(se->set_params == NULL) {
1444            continue;
1445        }
1446        se->set_params(blk_enable, shared, se->opaque);
1447    }
1448    
1449    qemu_put_be32(f, QEMU_VM_FILE_MAGIC);
1450    qemu_put_be32(f, QEMU_VM_FILE_VERSION);
1451
1452    QTAILQ_FOREACH(se, &savevm_handlers, entry) {
1453        int len;
1454
1455        if (se->save_live_state == NULL)
1456            continue;
1457
1458        /* Section type */
1459        qemu_put_byte(f, QEMU_VM_SECTION_START);
1460        qemu_put_be32(f, se->section_id);
1461
1462        /* ID string */
1463        len = strlen(se->idstr);
1464        qemu_put_byte(f, len);
1465        qemu_put_buffer(f, (uint8_t *)se->idstr, len);
1466
1467        qemu_put_be32(f, se->instance_id);
1468        qemu_put_be32(f, se->version_id);
1469
1470        se->save_live_state(mon, f, QEMU_VM_SECTION_START, se->opaque);
1471    }
1472
1473    if (qemu_file_has_error(f)) {
1474        qemu_savevm_state_cancel(mon, f);
1475        return -EIO;
1476    }
1477
1478    return 0;
1479}
1480
1481int qemu_savevm_state_iterate(Monitor *mon, QEMUFile *f)
1482{
1483    SaveStateEntry *se;
1484    int ret = 1;
1485
1486    QTAILQ_FOREACH(se, &savevm_handlers, entry) {
1487        if (se->save_live_state == NULL)
1488            continue;
1489
1490        /* Section type */
1491        qemu_put_byte(f, QEMU_VM_SECTION_PART);
1492        qemu_put_be32(f, se->section_id);
1493
1494        ret = se->save_live_state(mon, f, QEMU_VM_SECTION_PART, se->opaque);
1495        if (!ret) {
1496            /* Do not proceed to the next vmstate before this one reported
1497               completion of the current stage. This serializes the migration
1498               and reduces the probability that a faster changing state is
1499               synchronized over and over again. */
1500            break;
1501        }
1502    }
1503
1504    if (ret)
1505        return 1;
1506
1507    if (qemu_file_has_error(f)) {
1508        qemu_savevm_state_cancel(mon, f);
1509        return -EIO;
1510    }
1511
1512    return 0;
1513}
1514
1515int qemu_savevm_state_complete(Monitor *mon, QEMUFile *f)
1516{
1517    SaveStateEntry *se;
1518
1519    cpu_synchronize_all_states();
1520
1521    QTAILQ_FOREACH(se, &savevm_handlers, entry) {
1522        if (se->save_live_state == NULL)
1523            continue;
1524
1525        /* Section type */
1526        qemu_put_byte(f, QEMU_VM_SECTION_END);
1527        qemu_put_be32(f, se->section_id);
1528
1529        se->save_live_state(mon, f, QEMU_VM_SECTION_END, se->opaque);
1530    }
1531
1532    QTAILQ_FOREACH(se, &savevm_handlers, entry) {
1533        int len;
1534
1535        if (se->save_state == NULL && se->vmsd == NULL)
1536            continue;
1537
1538        /* Section type */
1539        qemu_put_byte(f, QEMU_VM_SECTION_FULL);
1540        qemu_put_be32(f, se->section_id);
1541
1542        /* ID string */
1543        len = strlen(se->idstr);
1544        qemu_put_byte(f, len);
1545        qemu_put_buffer(f, (uint8_t *)se->idstr, len);
1546
1547        qemu_put_be32(f, se->instance_id);
1548        qemu_put_be32(f, se->version_id);
1549
1550        vmstate_save(f, se);
1551    }
1552
1553    qemu_put_byte(f, QEMU_VM_EOF);
1554
1555    if (qemu_file_has_error(f))
1556        return -EIO;
1557
1558    return 0;
1559}
1560
1561void qemu_savevm_state_cancel(Monitor *mon, QEMUFile *f)
1562{
1563    SaveStateEntry *se;
1564
1565    QTAILQ_FOREACH(se, &savevm_handlers, entry) {
1566        if (se->save_live_state) {
1567            se->save_live_state(mon, f, -1, se->opaque);
1568        }
1569    }
1570}
1571
1572static int qemu_savevm_state(Monitor *mon, QEMUFile *f)
1573{
1574    int saved_vm_running;
1575    int ret;
1576
1577    saved_vm_running = vm_running;
1578    vm_stop(0);
1579
1580    if (qemu_savevm_state_blocked(mon)) {
1581        ret = -EINVAL;
1582        goto out;
1583    }
1584
1585    ret = qemu_savevm_state_begin(mon, f, 0, 0);
1586    if (ret < 0)
1587        goto out;
1588
1589    do {
1590        ret = qemu_savevm_state_iterate(mon, f);
1591        if (ret < 0)
1592            goto out;
1593    } while (ret == 0);
1594
1595    ret = qemu_savevm_state_complete(mon, f);
1596
1597out:
1598    if (qemu_file_has_error(f))
1599        ret = -EIO;
1600
1601    if (!ret && saved_vm_running)
1602        vm_start();
1603
1604    return ret;
1605}
1606
1607static SaveStateEntry *find_se(const char *idstr, int instance_id)
1608{
1609    SaveStateEntry *se;
1610
1611    QTAILQ_FOREACH(se, &savevm_handlers, entry) {
1612        if (!strcmp(se->idstr, idstr) &&
1613            (instance_id == se->instance_id ||
1614             instance_id == se->alias_id))
1615            return se;
1616        /* Migrating from an older version? */
1617        if (strstr(se->idstr, idstr) && se->compat) {
1618            if (!strcmp(se->compat->idstr, idstr) &&
1619                (instance_id == se->compat->instance_id ||
1620                 instance_id == se->alias_id))
1621                return se;
1622        }
1623    }
1624    return NULL;
1625}
1626
1627static const VMStateDescription *vmstate_get_subsection(const VMStateSubsection *sub, char *idstr)
1628{
1629    while(sub && sub->needed) {
1630        if (strcmp(idstr, sub->vmsd->name) == 0) {
1631            return sub->vmsd;
1632        }
1633        sub++;
1634    }
1635    return NULL;
1636}
1637
1638static int vmstate_subsection_load(QEMUFile *f, const VMStateDescription *vmsd,
1639                                   void *opaque)
1640{
1641    const VMStateSubsection *sub = vmsd->subsections;
1642
1643    if (!sub || !sub->needed) {
1644        return 0;
1645    }
1646
1647    while (qemu_peek_byte(f) == QEMU_VM_SUBSECTION) {
1648        char idstr[256];
1649        int ret;
1650        uint8_t version_id, len;
1651        const VMStateDescription *sub_vmsd;
1652
1653        qemu_get_byte(f); /* subsection */
1654        len = qemu_get_byte(f);
1655        qemu_get_buffer(f, (uint8_t *)idstr, len);
1656        idstr[len] = 0;
1657        version_id = qemu_get_be32(f);
1658
1659        sub_vmsd = vmstate_get_subsection(sub, idstr);
1660        if (sub_vmsd == NULL) {
1661            return -ENOENT;
1662        }
1663        assert(!sub_vmsd->subsections);
1664        ret = vmstate_load_state(f, sub_vmsd, opaque, version_id);
1665        if (ret) {
1666            return ret;
1667        }
1668    }
1669    return 0;
1670}
1671
1672static void vmstate_subsection_save(QEMUFile *f, const VMStateDescription *vmsd,
1673                                    void *opaque)
1674{
1675    const VMStateSubsection *sub = vmsd->subsections;
1676
1677    while (sub && sub->needed) {
1678        if (sub->needed(opaque)) {
1679            const VMStateDescription *vmsd = sub->vmsd;
1680            uint8_t len;
1681
1682            qemu_put_byte(f, QEMU_VM_SUBSECTION);
1683            len = strlen(vmsd->name);
1684            qemu_put_byte(f, len);
1685            qemu_put_buffer(f, (uint8_t *)vmsd->name, len);
1686            qemu_put_be32(f, vmsd->version_id);
1687            assert(!vmsd->subsections);
1688            vmstate_save_state(f, vmsd, opaque);
1689        }
1690        sub++;
1691    }
1692}
1693
1694typedef struct LoadStateEntry {
1695    QLIST_ENTRY(LoadStateEntry) entry;
1696    SaveStateEntry *se;
1697    int section_id;
1698    int version_id;
1699} LoadStateEntry;
1700
1701int qemu_loadvm_state(QEMUFile *f)
1702{
1703    QLIST_HEAD(, LoadStateEntry) loadvm_handlers =
1704        QLIST_HEAD_INITIALIZER(loadvm_handlers);
1705    LoadStateEntry *le, *new_le;
1706    uint8_t section_type;
1707    unsigned int v;
1708    int ret;
1709
1710    if (qemu_savevm_state_blocked(default_mon)) {
1711        return -EINVAL;
1712    }
1713
1714    v = qemu_get_be32(f);
1715    if (v != QEMU_VM_FILE_MAGIC)
1716        return -EINVAL;
1717
1718    v = qemu_get_be32(f);
1719    if (v == QEMU_VM_FILE_VERSION_COMPAT) {
1720        fprintf(stderr, "SaveVM v2 format is obsolete and don't work anymore\n");
1721        return -ENOTSUP;
1722    }
1723    if (v != QEMU_VM_FILE_VERSION)
1724        return -ENOTSUP;
1725
1726    while ((section_type = qemu_get_byte(f)) != QEMU_VM_EOF) {
1727        uint32_t instance_id, version_id, section_id;
1728        SaveStateEntry *se;
1729        char idstr[257];
1730        int len;
1731
1732        switch (section_type) {
1733        case QEMU_VM_SECTION_START:
1734        case QEMU_VM_SECTION_FULL:
1735            /* Read section start */
1736            section_id = qemu_get_be32(f);
1737            len = qemu_get_byte(f);
1738            qemu_get_buffer(f, (uint8_t *)idstr, len);
1739            idstr[len] = 0;
1740            instance_id = qemu_get_be32(f);
1741            version_id = qemu_get_be32(f);
1742
1743            /* Find savevm section */
1744            se = find_se(idstr, instance_id);
1745            if (se == NULL) {
1746                fprintf(stderr, "Unknown savevm section or instance '%s' %d\n", idstr, instance_id);
1747                ret = -EINVAL;
1748                goto out;
1749            }
1750
1751            /* Validate version */
1752            if (version_id > se->version_id) {
1753                fprintf(stderr, "savevm: unsupported version %d for '%s' v%d\n",
1754                        version_id, idstr, se->version_id);
1755                ret = -EINVAL;
1756                goto out;
1757            }
1758
1759            /* Add entry */
1760            le = qemu_mallocz(sizeof(*le));
1761
1762            le->se = se;
1763            le->section_id = section_id;
1764            le->version_id = version_id;
1765            QLIST_INSERT_HEAD(&loadvm_handlers, le, entry);
1766
1767            ret = vmstate_load(f, le->se, le->version_id);
1768            if (ret < 0) {
1769                fprintf(stderr, "qemu: warning: error while loading state for instance 0x%x of device '%s'\n",
1770                        instance_id, idstr);
1771                goto out;
1772            }
1773            break;
1774        case QEMU_VM_SECTION_PART:
1775        case QEMU_VM_SECTION_END:
1776            section_id = qemu_get_be32(f);
1777
1778            QLIST_FOREACH(le, &loadvm_handlers, entry) {
1779                if (le->section_id == section_id) {
1780                    break;
1781                }
1782            }
1783            if (le == NULL) {
1784                fprintf(stderr, "Unknown savevm section %d\n", section_id);
1785                ret = -EINVAL;
1786                goto out;
1787            }
1788
1789            ret = vmstate_load(f, le->se, le->version_id);
1790            if (ret < 0) {
1791                fprintf(stderr, "qemu: warning: error while loading state section id %d\n",
1792                        section_id);
1793                goto out;
1794            }
1795            break;
1796        default:
1797            fprintf(stderr, "Unknown savevm section type %d\n", section_type);
1798            ret = -EINVAL;
1799            goto out;
1800        }
1801    }
1802
1803    cpu_synchronize_all_post_init();
1804
1805    ret = 0;
1806
1807out:
1808    QLIST_FOREACH_SAFE(le, &loadvm_handlers, entry, new_le) {
1809        QLIST_REMOVE(le, entry);
1810        qemu_free(le);
1811    }
1812
1813    if (qemu_file_has_error(f))
1814        ret = -EIO;
1815
1816    return ret;
1817}
1818
1819static int bdrv_snapshot_find(BlockDriverState *bs, QEMUSnapshotInfo *sn_info,
1820                              const char *name)
1821{
1822    QEMUSnapshotInfo *sn_tab, *sn;
1823    int nb_sns, i, ret;
1824
1825    ret = -ENOENT;
1826    nb_sns = bdrv_snapshot_list(bs, &sn_tab);
1827    if (nb_sns < 0)
1828        return ret;
1829    for(i = 0; i < nb_sns; i++) {
1830        sn = &sn_tab[i];
1831        if (!strcmp(sn->id_str, name) || !strcmp(sn->name, name)) {
1832            *sn_info = *sn;
1833            ret = 0;
1834            break;
1835        }
1836    }
1837    qemu_free(sn_tab);
1838    return ret;
1839}
1840
1841/*
1842 * Deletes snapshots of a given name in all opened images.
1843 */
1844static int del_existing_snapshots(Monitor *mon, const char *name)
1845{
1846    BlockDriverState *bs;
1847    QEMUSnapshotInfo sn1, *snapshot = &sn1;
1848    int ret;
1849
1850    bs = NULL;
1851    while ((bs = bdrv_next(bs))) {
1852        if (bdrv_can_snapshot(bs) &&
1853            bdrv_snapshot_find(bs, snapshot, name) >= 0)
1854        {
1855            ret = bdrv_snapshot_delete(bs, name);
1856            if (ret < 0) {
1857                monitor_printf(mon,
1858                               "Error while deleting snapshot on '%s'\n",
1859                               bdrv_get_device_name(bs));
1860                return -1;
1861            }
1862        }
1863    }
1864
1865    return 0;
1866}
1867
1868void do_savevm(Monitor *mon, const QDict *qdict)
1869{
1870    BlockDriverState *bs, *bs1;
1871    QEMUSnapshotInfo sn1, *sn = &sn1, old_sn1, *old_sn = &old_sn1;
1872    int ret;
1873    QEMUFile *f;
1874    int saved_vm_running;
1875    uint32_t vm_state_size;
1876#ifdef _WIN32
1877    struct _timeb tb;
1878    struct tm *ptm;
1879#else
1880    struct timeval tv;
1881    struct tm tm;
1882#endif
1883    const char *name = qdict_get_try_str(qdict, "name");
1884
1885    /* Verify if there is a device that doesn't support snapshots and is writable */
1886    bs = NULL;
1887    while ((bs = bdrv_next(bs))) {
1888
1889        if (bdrv_is_removable(bs) || bdrv_is_read_only(bs)) {
1890            continue;
1891        }
1892
1893        if (!bdrv_can_snapshot(bs)) {
1894            monitor_printf(mon, "Device '%s' is writable but does not support snapshots.\n",
1895                               bdrv_get_device_name(bs));
1896            return;
1897        }
1898    }
1899
1900    bs = bdrv_snapshots();
1901    if (!bs) {
1902        monitor_printf(mon, "No block device can accept snapshots\n");
1903        return;
1904    }
1905
1906    saved_vm_running = vm_running;
1907    vm_stop(0);
1908
1909    memset(sn, 0, sizeof(*sn));
1910
1911    /* fill auxiliary fields */
1912#ifdef _WIN32
1913    _ftime(&tb);
1914    sn->date_sec = tb.time;
1915    sn->date_nsec = tb.millitm * 1000000;
1916#else
1917    gettimeofday(&tv, NULL);
1918    sn->date_sec = tv.tv_sec;
1919    sn->date_nsec = tv.tv_usec * 1000;
1920#endif
1921    sn->vm_clock_nsec = qemu_get_clock(vm_clock);
1922
1923    if (name) {
1924        ret = bdrv_snapshot_find(bs, old_sn, name);
1925        if (ret >= 0) {
1926            pstrcpy(sn->name, sizeof(sn->name), old_sn->name);
1927            pstrcpy(sn->id_str, sizeof(sn->id_str), old_sn->id_str);
1928        } else {
1929            pstrcpy(sn->name, sizeof(sn->name), name);
1930        }
1931    } else {
1932#ifdef _WIN32
1933        ptm = localtime(&tb.time);
1934        strftime(sn->name, sizeof(sn->name), "vm-%Y%m%d%H%M%S", ptm);
1935#else
1936        /* cast below needed for OpenBSD where tv_sec is still 'long' */
1937        localtime_r((const time_t *)&tv.tv_sec, &tm);
1938        strftime(sn->name, sizeof(sn->name), "vm-%Y%m%d%H%M%S", &tm);
1939#endif
1940    }
1941
1942    /* Delete old snapshots of the same name */
1943    if (name && del_existing_snapshots(mon, name) < 0) {
1944        goto the_end;
1945    }
1946
1947    /* save the VM state */
1948    f = qemu_fopen_bdrv(bs, 1);
1949    if (!f) {
1950        monitor_printf(mon, "Could not open VM state file\n");
1951        goto the_end;
1952    }
1953    ret = qemu_savevm_state(mon, f);
1954    vm_state_size = qemu_ftell(f);
1955    qemu_fclose(f);
1956    if (ret < 0) {
1957        monitor_printf(mon, "Error %d while writing VM\n", ret);
1958        goto the_end;
1959    }
1960
1961    /* create the snapshots */
1962
1963    bs1 = NULL;
1964    while ((bs1 = bdrv_next(bs1))) {
1965        if (bdrv_can_snapshot(bs1)) {
1966            /* Write VM state size only to the image that contains the state */
1967            sn->vm_state_size = (bs == bs1 ? vm_state_size : 0);
1968            ret = bdrv_snapshot_create(bs1, sn);
1969            if (ret < 0) {
1970                monitor_printf(mon, "Error while creating snapshot on '%s'\n",
1971                               bdrv_get_device_name(bs1));
1972            }
1973        }
1974    }
1975
1976 the_end:
1977    if (saved_vm_running)
1978        vm_start();
1979}
1980
1981int load_vmstate(const char *name)
1982{
1983    BlockDriverState *bs, *bs_vm_state;
1984    QEMUSnapshotInfo sn;
1985    QEMUFile *f;
1986    int ret;
1987
1988    bs_vm_state = bdrv_snapshots();
1989    if (!bs_vm_state) {
1990        error_report("No block device supports snapshots");
1991        return -ENOTSUP;
1992    }
1993
1994    /* Don't even try to load empty VM states */
1995    ret = bdrv_snapshot_find(bs_vm_state, &sn, name);
1996    if (ret < 0) {
1997        return ret;
1998    } else if (sn.vm_state_size == 0) {
1999        return -EINVAL;
2000    }
2001
2002    /* Verify if there is any device that doesn't support snapshots and is
2003    writable and check if the requested snapshot is available too. */
2004    bs = NULL;
2005    while ((bs = bdrv_next(bs))) {
2006
2007        if (bdrv_is_removable(bs) || bdrv_is_read_only(bs)) {
2008            continue;
2009        }
2010
2011        if (!bdrv_can_snapshot(bs)) {
2012            error_report("Device '%s' is writable but does not support snapshots.",
2013                               bdrv_get_device_name(bs));
2014            return -ENOTSUP;
2015        }
2016
2017        ret = bdrv_snapshot_find(bs, &sn, name);
2018        if (ret < 0) {
2019            error_report("Device '%s' does not have the requested snapshot '%s'",
2020                           bdrv_get_device_name(bs), name);
2021            return ret;
2022        }
2023    }
2024
2025    /* Flush all IO requests so they don't interfere with the new state.  */
2026    qemu_aio_flush();
2027
2028    bs = NULL;
2029    while ((bs = bdrv_next(bs))) {
2030        if (bdrv_can_snapshot(bs)) {
2031            ret = bdrv_snapshot_goto(bs, name);
2032            if (ret < 0) {
2033                error_report("Error %d while activating snapshot '%s' on '%s'",
2034                             ret, name, bdrv_get_device_name(bs));
2035                return ret;
2036            }
2037        }
2038    }
2039
2040    /* restore the VM state */
2041    f = qemu_fopen_bdrv(bs_vm_state, 0);
2042    if (!f) {
2043        error_report("Could not open VM state file");
2044        return -EINVAL;
2045    }
2046
2047    ret = qemu_loadvm_state(f);
2048
2049    qemu_fclose(f);
2050    if (ret < 0) {
2051        error_report("Error %d while loading VM state", ret);
2052        return ret;
2053    }
2054
2055    return 0;
2056}
2057
2058void do_delvm(Monitor *mon, const QDict *qdict)
2059{
2060    BlockDriverState *bs, *bs1;
2061    int ret;
2062    const char *name = qdict_get_str(qdict, "name");
2063
2064    bs = bdrv_snapshots();
2065    if (!bs) {
2066        monitor_printf(mon, "No block device supports snapshots\n");
2067        return;
2068    }
2069
2070    bs1 = NULL;
2071    while ((bs1 = bdrv_next(bs1))) {
2072        if (bdrv_can_snapshot(bs1)) {
2073            ret = bdrv_snapshot_delete(bs1, name);
2074            if (ret < 0) {
2075                if (ret == -ENOTSUP)
2076                    monitor_printf(mon,
2077                                   "Snapshots not supported on device '%s'\n",
2078                                   bdrv_get_device_name(bs1));
2079                else
2080                    monitor_printf(mon, "Error %d while deleting snapshot on "
2081                                   "'%s'\n", ret, bdrv_get_device_name(bs1));
2082            }
2083        }
2084    }
2085}
2086
2087void do_info_snapshots(Monitor *mon)
2088{
2089    BlockDriverState *bs, *bs1;
2090    QEMUSnapshotInfo *sn_tab, *sn, s, *sn_info = &s;
2091    int nb_sns, i, ret, available;
2092    int total;
2093    int *available_snapshots;
2094    char buf[256];
2095
2096    bs = bdrv_snapshots();
2097    if (!bs) {
2098        monitor_printf(mon, "No available block device supports snapshots\n");
2099        return;
2100    }
2101
2102    nb_sns = bdrv_snapshot_list(bs, &sn_tab);
2103    if (nb_sns < 0) {
2104        monitor_printf(mon, "bdrv_snapshot_list: error %d\n", nb_sns);
2105        return;
2106    }
2107
2108    if (nb_sns == 0) {
2109        monitor_printf(mon, "There is no snapshot available.\n");
2110        return;
2111    }
2112
2113    available_snapshots = qemu_mallocz(sizeof(int) * nb_sns);
2114    total = 0;
2115    for (i = 0; i < nb_sns; i++) {
2116        sn = &sn_tab[i];
2117        available = 1;
2118        bs1 = NULL;
2119
2120        while ((bs1 = bdrv_next(bs1))) {
2121            if (bdrv_can_snapshot(bs1) && bs1 != bs) {
2122                ret = bdrv_snapshot_find(bs1, sn_info, sn->id_str);
2123                if (ret < 0) {
2124                    available = 0;
2125                    break;
2126                }
2127            }
2128        }
2129
2130        if (available) {
2131            available_snapshots[total] = i;
2132            total++;
2133        }
2134    }
2135
2136    if (total > 0) {
2137        monitor_printf(mon, "%s\n", bdrv_snapshot_dump(buf, sizeof(buf), NULL));
2138        for (i = 0; i < total; i++) {
2139            sn = &sn_tab[available_snapshots[i]];
2140            monitor_printf(mon, "%s\n", bdrv_snapshot_dump(buf, sizeof(buf), sn));
2141        }
2142    } else {
2143        monitor_printf(mon, "There is no suitable snapshot available\n");
2144    }
2145
2146    qemu_free(sn_tab);
2147    qemu_free(available_snapshots);
2148
2149}
2150