From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:46120) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ZK7DY-0000PX-DV for qemu-devel@nongnu.org; Tue, 28 Jul 2015 11:55:01 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1ZK7DU-0008CS-Id for qemu-devel@nongnu.org; Tue, 28 Jul 2015 11:55:00 -0400 Received: from smtp02.citrix.com ([66.165.176.63]:19668) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ZK7DU-00089O-Ez for qemu-devel@nongnu.org; Tue, 28 Jul 2015 11:54:56 -0400 From: Anthony PERARD Date: Tue, 28 Jul 2015 16:54:44 +0100 Message-ID: <1438098885-4339-3-git-send-email-anthony.perard@citrix.com> In-Reply-To: <1438098885-4339-1-git-send-email-anthony.perard@citrix.com> References: <1438098885-4339-1-git-send-email-anthony.perard@citrix.com> MIME-Version: 1.0 Content-Type: text/plain Subject: [Qemu-devel] [PATCH RFC 2/3] migration: Fix global state with Xen. List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: QEMU-devel Cc: Juan Quintela , Xen Devel , Anthony PERARD , Stefano Stabellini , Anthony PERARD , Amit Shah 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 --- 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)); +} + 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) { -- Anthony PERARD