qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* [Qemu-devel] [PATCH] qmp: handle stop/cont in INMIGRATE state
@ 2012-10-18  9:14 Paolo Bonzini
  2012-10-18 16:42 ` Luiz Capitulino
  0 siblings, 1 reply; 6+ messages in thread
From: Paolo Bonzini @ 2012-10-18  9:14 UTC (permalink / raw)
  To: qemu-devel; +Cc: lcapitulino

Right now, stop followed by an incoming migration will let the
virtual machine start.  cont before an incoming migration instead
will fail.

This is bad because the actual behavior is not predictable; it is
racy with respect to the start of the incoming migration.  That's
because incoming migration is blocking, and thus will delay the
processing of stop/cont until the end of the migration.

In addition, there's nothing that really prevents the user from
typing the block device's passwords before incoming migration is
done, so we may as well allow that.

Both things can be fixed by just toggling the autostart variable when
stop/cont are called in INMIGRATE state.

Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
 qmp.c | 17 +++++++++++------
 1 file modificato, 11 inserzioni(+), 6 rimozioni(-)

diff --git a/qmp.c b/qmp.c
index 36c54c5..2c8d559 100644
--- a/qmp.c
+++ b/qmp.c
@@ -85,7 +85,11 @@ void qmp_quit(Error **err)
 
 void qmp_stop(Error **errp)
 {
-    vm_stop(RUN_STATE_PAUSED);
+    if (runstate_check(RUN_STATE_INMIGRATE)) {
+        autostart = 0;
+    } else {
+        vm_stop(RUN_STATE_PAUSED);
+    }
 }
 
 void qmp_system_reset(Error **errp)
@@ -144,10 +148,7 @@ void qmp_cont(Error **errp)
 {
     Error *local_err = NULL;
 
-    if (runstate_check(RUN_STATE_INMIGRATE)) {
-        error_set(errp, QERR_MIGRATION_EXPECTED);
-        return;
-    } else if (runstate_check(RUN_STATE_INTERNAL_ERROR) ||
+    if (runstate_check(RUN_STATE_INTERNAL_ERROR) ||
                runstate_check(RUN_STATE_SHUTDOWN)) {
         error_set(errp, QERR_RESET_REQUIRED);
         return;
@@ -162,7 +163,11 @@ void qmp_cont(Error **errp)
         return;
     }
 
-    vm_start();
+    if (runstate_check(RUN_STATE_INMIGRATE)) {
+        autostart = 1;
+    } else {
+        vm_start();
+    }
 }
 
 void qmp_system_wakeup(Error **errp)
-- 
1.7.12.1

^ permalink raw reply related	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2012-10-19 14:01 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-10-18  9:14 [Qemu-devel] [PATCH] qmp: handle stop/cont in INMIGRATE state Paolo Bonzini
2012-10-18 16:42 ` Luiz Capitulino
2012-10-19  9:27   ` Paolo Bonzini
2012-10-19 13:23     ` Luiz Capitulino
2012-10-19 13:50       ` Paolo Bonzini
2012-10-19 14:02         ` Luiz Capitulino

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).