aboutsummaryrefslogtreecommitdiff
path: root/migration
diff options
context:
space:
mode:
authorAnthony PERARD <anthony.perard@citrix.com>2015-08-03 15:29:19 +0100
committerStefano Stabellini <stefano.stabellini@eu.citrix.com>2015-08-03 16:13:23 +0000
commitc69adea462a97c02001b2dd1edd2a0692d27f5a2 (patch)
treef4c4f237972bb0425b4abce18f60a0935355327d /migration
parentf60c87154ac722c528fd5582f7137914a93c5eec (diff)
migration: Fix global state with Xen.
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 <anthony.perard@citrix.com> Signed-off-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
Diffstat (limited to 'migration')
-rw-r--r--migration/migration.c7
-rw-r--r--migration/savevm.c1
2 files changed, 8 insertions, 0 deletions
diff --git a/migration/migration.c b/migration/migration.c
index fd4f99b84e..662e77e4eb 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];
+ strncpy((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 81dbe5879f..60712153fa 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) {