From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1O52Ao-0001qb-Uv for qemu-devel@nongnu.org; Thu, 22 Apr 2010 15:34:55 -0400 Received: from [140.186.70.92] (port=59028 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1O52An-0001om-DK for qemu-devel@nongnu.org; Thu, 22 Apr 2010 15:34:54 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.69) (envelope-from ) id 1O52Ae-0007UJ-Qq for qemu-devel@nongnu.org; Thu, 22 Apr 2010 15:34:53 -0400 Received: from e8.ny.us.ibm.com ([32.97.182.138]:58550) by eggs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1O52Aa-0007TB-5k for qemu-devel@nongnu.org; Thu, 22 Apr 2010 15:34:44 -0400 Received: from d01relay01.pok.ibm.com (d01relay01.pok.ibm.com [9.56.227.233]) by e8.ny.us.ibm.com (8.14.3/8.13.1) with ESMTP id o3MJGDXL018740 for ; Thu, 22 Apr 2010 15:16:13 -0400 Received: from d01av01.pok.ibm.com (d01av01.pok.ibm.com [9.56.224.215]) by d01relay01.pok.ibm.com (8.13.8/8.13.8/NCO v10.0) with ESMTP id o3MJYdkS115592 for ; Thu, 22 Apr 2010 15:34:39 -0400 Received: from d01av01.pok.ibm.com (loopback [127.0.0.1]) by d01av01.pok.ibm.com (8.14.3/8.13.1/NCO v10.0 AVout) with ESMTP id o3MJYdMp021241 for ; Thu, 22 Apr 2010 15:34:39 -0400 Message-ID: <4BD0A4CD.2060506@linux.vnet.ibm.com> Date: Thu, 22 Apr 2010 14:34:37 -0500 From: Anthony Liguori MIME-Version: 1.0 References: <1271829445-5328-1-git-send-email-tamura.yoshiaki@lab.ntt.co.jp> <1271829445-5328-11-git-send-email-tamura.yoshiaki@lab.ntt.co.jp> In-Reply-To: <1271829445-5328-11-git-send-email-tamura.yoshiaki@lab.ntt.co.jp> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Subject: [Qemu-devel] Re: [RFC PATCH 10/20] Introduce skip_header parameter to qemu_loadvm_state() so that it can be called iteratively without reading the header. List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Yoshiaki Tamura Cc: ohmura.kei@lab.ntt.co.jp, kvm@vger.kernel.org, mtosatti@redhat.com, Anthony Liguori , qemu-devel@nongnu.org, yoshikawa.takuya@oss.ntt.co.jp, avi@redhat.com On 04/21/2010 12:57 AM, Yoshiaki Tamura wrote: > Signed-off-by: Yoshiaki Tamura > I think the more appropriate thing to do is have qemu_savevm_state_complete() not write QEMU_VM_EOF when doing a continuous live migration. You would then want qemu_loadvm_state() to detect real EOF and treat that the same as QEMU_VM_EOF (provided it occurred at a section boundary). Of course, this should be a flag to qemu_loadvm_state() as it's not always the right behavior. Regards, Anthony Liguori > --- > migration-exec.c | 2 +- > migration-fd.c | 2 +- > migration-tcp.c | 2 +- > migration-unix.c | 2 +- > savevm.c | 25 ++++++++++++++----------- > sysemu.h | 2 +- > 6 files changed, 19 insertions(+), 16 deletions(-) > > diff --git a/migration-exec.c b/migration-exec.c > index 3edc026..5839a6d 100644 > --- a/migration-exec.c > +++ b/migration-exec.c > @@ -113,7 +113,7 @@ static void exec_accept_incoming_migration(void *opaque) > QEMUFile *f = opaque; > int ret; > > - ret = qemu_loadvm_state(f); > + ret = qemu_loadvm_state(f, 0); > if (ret< 0) { > fprintf(stderr, "load of migration failed\n"); > goto err; > diff --git a/migration-fd.c b/migration-fd.c > index 0cc74ad..0e97ed0 100644 > --- a/migration-fd.c > +++ b/migration-fd.c > @@ -106,7 +106,7 @@ static void fd_accept_incoming_migration(void *opaque) > QEMUFile *f = opaque; > int ret; > > - ret = qemu_loadvm_state(f); > + ret = qemu_loadvm_state(f, 0); > if (ret< 0) { > fprintf(stderr, "load of migration failed\n"); > goto err; > diff --git a/migration-tcp.c b/migration-tcp.c > index 56e1a3b..94a1a03 100644 > --- a/migration-tcp.c > +++ b/migration-tcp.c > @@ -182,7 +182,7 @@ static void tcp_accept_incoming_migration(void *opaque) > goto out; > } > > - ret = qemu_loadvm_state(f); > + ret = qemu_loadvm_state(f, 0); > if (ret< 0) { > fprintf(stderr, "load of migration failed\n"); > goto out_fopen; > diff --git a/migration-unix.c b/migration-unix.c > index b7aab38..dd99a73 100644 > --- a/migration-unix.c > +++ b/migration-unix.c > @@ -168,7 +168,7 @@ static void unix_accept_incoming_migration(void *opaque) > goto out; > } > > - ret = qemu_loadvm_state(f); > + ret = qemu_loadvm_state(f, 0); > if (ret< 0) { > fprintf(stderr, "load of migration failed\n"); > goto out_fopen; > diff --git a/savevm.c b/savevm.c > index 22d928c..a401b27 100644 > --- a/savevm.c > +++ b/savevm.c > @@ -1554,7 +1554,7 @@ typedef struct LoadStateEntry { > int version_id; > } LoadStateEntry; > > -int qemu_loadvm_state(QEMUFile *f) > +int qemu_loadvm_state(QEMUFile *f, int skip_header) > { > QLIST_HEAD(, LoadStateEntry) loadvm_handlers = > QLIST_HEAD_INITIALIZER(loadvm_handlers); > @@ -1563,17 +1563,20 @@ int qemu_loadvm_state(QEMUFile *f) > unsigned int v; > int ret; > > - v = qemu_get_be32(f); > - if (v != QEMU_VM_FILE_MAGIC) > - return -EINVAL; > + if (!skip_header) { > + v = qemu_get_be32(f); > + if (v != QEMU_VM_FILE_MAGIC) > + return -EINVAL; > + > + v = qemu_get_be32(f); > + if (v == QEMU_VM_FILE_VERSION_COMPAT) { > + fprintf(stderr, "SaveVM v3 format is obsolete and don't work anymore\n"); > + return -ENOTSUP; > + } > + if (v != QEMU_VM_FILE_VERSION) > + return -ENOTSUP; > > - v = qemu_get_be32(f); > - if (v == QEMU_VM_FILE_VERSION_COMPAT) { > - fprintf(stderr, "SaveVM v2 format is obsolete and don't work anymore\n"); > - return -ENOTSUP; > } > - if (v != QEMU_VM_FILE_VERSION) > - return -ENOTSUP; > > while ((section_type = qemu_get_byte(f)) != QEMU_VM_EOF) { > uint32_t instance_id, version_id, section_id; > @@ -1898,7 +1901,7 @@ int load_vmstate(Monitor *mon, const char *name) > monitor_printf(mon, "Could not open VM state file\n"); > return -EINVAL; > } > - ret = qemu_loadvm_state(f); > + ret = qemu_loadvm_state(f, 0); > qemu_fclose(f); > if (ret< 0) { > monitor_printf(mon, "Error %d while loading VM state\n", ret); > diff --git a/sysemu.h b/sysemu.h > index 647a468..6c1441f 100644 > --- a/sysemu.h > +++ b/sysemu.h > @@ -68,7 +68,7 @@ int qemu_savevm_state_begin(Monitor *mon, QEMUFile *f, int blk_enable, > int qemu_savevm_state_iterate(Monitor *mon, QEMUFile *f); > int qemu_savevm_state_complete(Monitor *mon, QEMUFile *f); > void qemu_savevm_state_cancel(Monitor *mon, QEMUFile *f); > -int qemu_loadvm_state(QEMUFile *f); > +int qemu_loadvm_state(QEMUFile *f, int skip_header); > > void qemu_errors_to_file(FILE *fp); > void qemu_errors_to_mon(Monitor *mon); >