summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorPeter Maydell <peter.maydell@linaro.org>2015-08-03 17:33:35 +0100
committerPeter Maydell <peter.maydell@linaro.org>2015-08-03 17:33:35 +0100
commite95edefbd0559e1d0aa09549641b5d9af1f96fac (patch)
tree88dcd36e5ae08283a170ee8bf9394932c94a5871
parentf60c87154ac722c528fd5582f7137914a93c5eec (diff)
parent8c6dc68f4cff9eef870497a19a5373dde9dbdcc2 (diff)
downloadfocaccia-qemu-e95edefbd0559e1d0aa09549641b5d9af1f96fac.tar.gz
focaccia-qemu-e95edefbd0559e1d0aa09549641b5d9af1f96fac.zip
Merge remote-tracking branch 'remotes/sstabellini/tags/xen-migration-2.4-tag' into staging
xen-migration-2.4

# gpg: Signature made Mon 03 Aug 2015 17:18:36 BST using RSA key ID 70E1AE90
# gpg: Good signature from "Stefano Stabellini <stefano.stabellini@eu.citrix.com>"

* remotes/sstabellini/tags/xen-migration-2.4-tag:
  migration: Fix regression for xenfv and pc,accel=xen machine.
  migration: Fix global state with Xen.

Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Diffstat (limited to '')
-rw-r--r--include/migration/migration.h1
-rw-r--r--migration/migration.c7
-rw-r--r--migration/savevm.c1
-rw-r--r--xen-common.c5
4 files changed, 14 insertions, 0 deletions
diff --git a/include/migration/migration.h b/include/migration/migration.h
index a2f8ed093c..83346210b1 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 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) {
diff --git a/xen-common.c b/xen-common.c
index 56359ca725..0dcdbc39f4 100644
--- a/xen-common.c
+++ b/xen-common.c
@@ -12,6 +12,7 @@
 #include "qmp-commands.h"
 #include "sysemu/char.h"
 #include "sysemu/accel.h"
+#include "migration/migration.h"
 
 //#define DEBUG_XEN
 
@@ -119,6 +120,10 @@ static int xen_init(MachineState *ms)
     }
     qemu_add_vm_change_state_handler(xen_change_state_handler, NULL);
 
+    global_state_set_optional();
+    savevm_skip_configuration();
+    savevm_skip_section_footers();
+
     return 0;
 }