From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1O52Dz-0003IG-OD for qemu-devel@nongnu.org; Thu, 22 Apr 2010 15:38:11 -0400 Received: from [140.186.70.92] (port=59529 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1O52Dw-0003Hy-QD for qemu-devel@nongnu.org; Thu, 22 Apr 2010 15:38:11 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.69) (envelope-from ) id 1O52Dq-00089l-Of for qemu-devel@nongnu.org; Thu, 22 Apr 2010 15:38:04 -0400 Received: from e2.ny.us.ibm.com ([32.97.182.142]:36451) by eggs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1O52Dq-00089U-0z for qemu-devel@nongnu.org; Thu, 22 Apr 2010 15:38:02 -0400 Received: from d01relay05.pok.ibm.com (d01relay05.pok.ibm.com [9.56.227.237]) by e2.ny.us.ibm.com (8.14.3/8.13.1) with ESMTP id o3MJQXK3006418 for ; Thu, 22 Apr 2010 15:26:33 -0400 Received: from d01av03.pok.ibm.com (d01av03.pok.ibm.com [9.56.224.217]) by d01relay05.pok.ibm.com (8.13.8/8.13.8/NCO v10.0) with ESMTP id o3MJc1q0149388 for ; Thu, 22 Apr 2010 15:38:01 -0400 Received: from d01av03.pok.ibm.com (loopback [127.0.0.1]) by d01av03.pok.ibm.com (8.14.3/8.13.1/NCO v10.0 AVout) with ESMTP id o3MJc0Cf031005 for ; Thu, 22 Apr 2010 16:38:01 -0300 Message-ID: <4BD0A596.9030906@linux.vnet.ibm.com> Date: Thu, 22 Apr 2010 14:37:58 -0500 From: Anthony Liguori MIME-Version: 1.0 References: <1271829445-5328-1-git-send-email-tamura.yoshiaki@lab.ntt.co.jp> <1271829445-5328-15-git-send-email-tamura.yoshiaki@lab.ntt.co.jp> In-Reply-To: <1271829445-5328-15-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 14/20] Upgrade QEMU_FILE_VERSION from 3 to 4, and introduce qemu_savevm_state_all(). 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: > Make a 32bit entry after QEMU_VM_FILE_VERSION to recognize whether the > transfered data is QEMU_VM_FT_MODE or QEMU_VM_LIVE_MIGRATION_MODE. > I'd rather you encapsulate the current protocol as opposed to extending it with a new version. You could also do this by just having a new -incoming option, right? All you really need is to indicate that this is for high frequency checkpointing, right? Regards, Anthony Liguori > Signed-off-by: Yoshiaki Tamura > --- > savevm.c | 76 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++- > sysemu.h | 1 + > 2 files changed, 75 insertions(+), 2 deletions(-) > > diff --git a/savevm.c b/savevm.c > index 292ae32..19b3efb 100644 > --- a/savevm.c > +++ b/savevm.c > @@ -1402,8 +1402,10 @@ static void vmstate_save(QEMUFile *f, SaveStateEntry *se) > } > > #define QEMU_VM_FILE_MAGIC 0x5145564d > -#define QEMU_VM_FILE_VERSION_COMPAT 0x00000002 > -#define QEMU_VM_FILE_VERSION 0x00000003 > +#define QEMU_VM_FILE_VERSION_COMPAT 0x00000003 > +#define QEMU_VM_FILE_VERSION 0x00000004 > +#define QEMU_VM_LIVE_MIGRATION_MODE 0x00000005 > +#define QEMU_VM_FT_MODE 0x00000006 > > #define QEMU_VM_EOF 0x00 > #define QEMU_VM_SECTION_START 0x01 > @@ -1425,6 +1427,12 @@ int qemu_savevm_state_begin(Monitor *mon, QEMUFile *f, int blk_enable, > > qemu_put_be32(f, QEMU_VM_FILE_MAGIC); > qemu_put_be32(f, QEMU_VM_FILE_VERSION); > + > + if (ft_mode) { > + qemu_put_be32(f, QEMU_VM_FT_MODE); > + } else { > + qemu_put_be32(f, QEMU_VM_LIVE_MIGRATION_MODE); > + } > > QTAILQ_FOREACH(se,&savevm_handlers, entry) { > int len; > @@ -1533,6 +1541,66 @@ int qemu_savevm_state_complete(Monitor *mon, QEMUFile *f) > return 0; > } > > +int qemu_savevm_state_all(Monitor *mon, QEMUFile *f) > +{ > + SaveStateEntry *se; > + > + QTAILQ_FOREACH(se,&savevm_handlers, entry) { > + int len; > + > + if (se->save_live_state == NULL) > + continue; > + > + /* Section type */ > + qemu_put_byte(f, QEMU_VM_SECTION_START); > + qemu_put_be32(f, se->section_id); > + > + /* ID string */ > + len = strlen(se->idstr); > + qemu_put_byte(f, len); > + qemu_put_buffer(f, (uint8_t *)se->idstr, len); > + > + qemu_put_be32(f, se->instance_id); > + qemu_put_be32(f, se->version_id); > + if (ft_mode == FT_INIT) { > + /* This is workaround. */ > + se->save_live_state(mon, f, QEMU_VM_SECTION_START, se->opaque); > + } else { > + se->save_live_state(mon, f, QEMU_VM_SECTION_PART, se->opaque); > + } > + } > + > + ft_mode = FT_TRANSACTION; > + QTAILQ_FOREACH(se,&savevm_handlers, entry) { > + int len; > + > + if (se->save_state == NULL&& se->vmsd == NULL) > + continue; > + > + /* Section type */ > + qemu_put_byte(f, QEMU_VM_SECTION_FULL); > + qemu_put_be32(f, se->section_id); > + > + /* ID string */ > + len = strlen(se->idstr); > + qemu_put_byte(f, len); > + qemu_put_buffer(f, (uint8_t *)se->idstr, len); > + > + qemu_put_be32(f, se->instance_id); > + qemu_put_be32(f, se->version_id); > + > + vmstate_save(f, se); > + } > + > + qemu_put_byte(f, QEMU_VM_EOF); > + > + if (qemu_file_has_error(f)) > + return -EIO; > + > + return 0; > +} > + > + > void qemu_savevm_state_cancel(Monitor *mon, QEMUFile *f) > { > SaveStateEntry *se; > @@ -1617,6 +1685,10 @@ int qemu_loadvm_state(QEMUFile *f, int skip_header) > if (v != QEMU_VM_FILE_VERSION) > return -ENOTSUP; > > + v = qemu_get_be32(f); > + if (v == QEMU_VM_FT_MODE) { > + ft_mode = FT_INIT; > + } > } > > while ((section_type = qemu_get_byte(f)) != QEMU_VM_EOF) { > diff --git a/sysemu.h b/sysemu.h > index 6c1441f..df314bb 100644 > --- a/sysemu.h > +++ b/sysemu.h > @@ -67,6 +67,7 @@ int qemu_savevm_state_begin(Monitor *mon, QEMUFile *f, int blk_enable, > int shared); > int qemu_savevm_state_iterate(Monitor *mon, QEMUFile *f); > int qemu_savevm_state_complete(Monitor *mon, QEMUFile *f); > +int qemu_savevm_state_all(Monitor *mon, QEMUFile *f); > void qemu_savevm_state_cancel(Monitor *mon, QEMUFile *f); > int qemu_loadvm_state(QEMUFile *f, int skip_header); > >