From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:35604) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ZMFC8-0000wh-Ge for qemu-devel@nongnu.org; Mon, 03 Aug 2015 08:50:24 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1ZMFC4-000412-Gr for qemu-devel@nongnu.org; Mon, 03 Aug 2015 08:50:20 -0400 Received: from mx1.redhat.com ([209.132.183.28]:51692) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ZMFC4-00040b-BU for qemu-devel@nongnu.org; Mon, 03 Aug 2015 08:50:16 -0400 Date: Mon, 3 Aug 2015 13:50:12 +0100 From: "Dr. David Alan Gilbert" Message-ID: <20150803125011.GB2362@work-vm> References: <9c7292fe59f31cc3296c15a5b693867fbabe9fad.1438605827.git.amit.shah@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <9c7292fe59f31cc3296c15a5b693867fbabe9fad.1438605827.git.amit.shah@redhat.com> Subject: Re: [Qemu-devel] [PULL for-2.4 2/3] migration: Fix global state with Xen. List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Amit Shah Cc: Anthony PERARD , Peter Maydell , qemu list , Anthony PERARD * Amit Shah (amit.shah@redhat.com) wrote: > From: Anthony PERARD > > When doing migration via the QMP command xen_save_devices_state, the > current runstate is not store into the global state section. Also the > current runstate is not the one we want on the receiver side. > > During migration, the Xen toolstack paused QEMU before save the devices > state. Also, the toolstack expect QEMU to autostart when the migration is > finished. > So this patch store "running" as it's current runstate. > > Signed-off-by: Anthony PERARD > Message-Id: <1438098885-4339-3-git-send-email-anthony.perard@citrix.com> > Signed-off-by: Amit Shah > --- > include/migration/migration.h | 1 + > migration/migration.c | 7 +++++++ > migration/savevm.c | 1 + > 3 files changed, 9 insertions(+) > > diff --git a/include/migration/migration.h b/include/migration/migration.h > index a2f8ed0..8334621 100644 > --- a/include/migration/migration.h > +++ b/include/migration/migration.h > @@ -203,4 +203,5 @@ void register_global_state(void); > void global_state_set_optional(void); > void savevm_skip_configuration(void); > int global_state_store(void); > +void global_state_store_running(void); > #endif > diff --git a/migration/migration.c b/migration/migration.c > index fd4f99b..175a397 100644 > --- a/migration/migration.c > +++ b/migration/migration.c > @@ -122,6 +122,13 @@ int global_state_store(void) > return 0; > } > > +void global_state_store_running(void) > +{ > + const char *state = RunState_lookup[RUN_STATE_RUNNING]; > + memcpy((char *)global_state.runstate, > + state, sizeof(global_state.runstate)); > +} As mentioned previously, I think that needs to be a strcpy, NOT a memcpy; the RuNState_lookup[] array isn't guaranteed to be long enough to fulfill that memcpy. Dave > + > static bool global_state_received(void) > { > return global_state.received; > diff --git a/migration/savevm.c b/migration/savevm.c > index 81dbe58..6071215 100644 > --- a/migration/savevm.c > +++ b/migration/savevm.c > @@ -1394,6 +1394,7 @@ void qmp_xen_save_devices_state(const char *filename, Error **errp) > > saved_vm_running = runstate_is_running(); > vm_stop(RUN_STATE_SAVE_VM); > + global_state_store_running(); > > f = qemu_fopen(filename, "wb"); > if (!f) { > -- > 2.4.3 > > -- Dr. David Alan Gilbert / dgilbert@redhat.com / Manchester, UK