This patch adds more valid transitions to the table, and avoids that the VM remains stuck in RSTATE_SAVEVM state when savevm is done on a paused virtual machine.
Signed-off-by: Paolo Bonzini <pbonz...@redhat.com> --- savevm.c | 9 +++++++-- vl.c | 5 +++++ 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/savevm.c b/savevm.c index bf4d0e7..ac45db8 100644 --- a/savevm.c +++ b/savevm.c @@ -1626,8 +1626,13 @@ out: if (qemu_file_has_error(f)) ret = -EIO; - if (!ret && saved_vm_running) - vm_start(); + if (!ret) { + if (saved_vm_running) { + vm_start(); + } else { + runstate_set(RSTATE_PAUSED); + } + } return ret; } diff --git a/vl.c b/vl.c index dbf7778..6614aac 100644 --- a/vl.c +++ b/vl.c @@ -343,8 +343,12 @@ static const RunStateTransition runstate_transitions_def[] = { { RUN_STATE_IO_ERROR, RUN_STATE_RUNNING }, { RUN_STATE_PAUSED, RUN_STATE_RUNNING }, + { RUN_STATE_PAUSED, RUN_STATE_FINISH_MIGRATE }, + { RUN_STATE_PAUSED, RUN_STATE_SAVE_VM }, { RUN_STATE_POSTMIGRATE, RUN_STATE_RUNNING }, + { RUN_STATE_POSTMIGRATE, RUN_STATE_FINISH_MIGRATE }, + { RUN_STATE_POSTMIGRATE, RUN_STATE_SAVE_VM }, { RUN_STATE_PRELAUNCH, RUN_STATE_RUNNING }, { RUN_STATE_PRELAUNCH, RUN_STATE_INMIGRATE }, @@ -366,6 +370,7 @@ static const RunStateTransition runstate_transitions_def[] = { { RUN_STATE_RUNNING, RUN_STATE_WATCHDOG }, { RUN_STATE_SAVE_VM, RUN_STATE_RUNNING }, + { RUN_STATE_SAVE_VM, RUN_STATE_PAUSED }, { RUN_STATE_SHUTDOWN, RUN_STATE_PAUSED }, -- 1.7.6