mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-04 00:03:54 -06:00
cpus: stop vm in suspended runstate
Currently, a vm in the suspended state is not completely stopped. The VCPUs have been paused, but the cpu clock still runs, and runstate notifiers for the transition to stopped have not been called. This causes problems for live migration. Stale cpu timers_state is saved to the migration stream, causing time errors in the guest when it wakes from suspend, and state that would have been modified by runstate notifiers is wrong. Modify vm_stop to completely stop the vm if the current state is suspended, transition to RUN_STATE_PAUSED, and remember that the machine was suspended. Modify vm_start to restore the suspended state. This affects all callers of vm_stop and vm_start, notably, the qapi stop and cont commands: old behavior: RUN_STATE_SUSPENDED --> stop --> RUN_STATE_SUSPENDED new behavior: RUN_STATE_SUSPENDED --> stop --> RUN_STATE_PAUSED RUN_STATE_PAUSED --> cont --> RUN_STATE_SUSPENDED For example: (qemu) info status VM status: paused (suspended) (qemu) stop (qemu) info status VM status: paused (qemu) system_wakeup Error: Unable to wake up: guest is not in suspended state (qemu) cont (qemu) info status VM status: paused (suspended) (qemu) system_wakeup (qemu) info status VM status: running Suggested-by: Peter Xu <peterx@redhat.com> Signed-off-by: Steve Sistare <steven.sistare@oracle.com> Reviewed-by: Peter Xu <peterx@redhat.com> Link: https://lore.kernel.org/r/1704312341-66640-3-git-send-email-steven.sistare@oracle.com Signed-off-by: Peter Xu <peterx@redhat.com>
This commit is contained in:
parent
f06f316d3e
commit
b9ae473d80
5 changed files with 39 additions and 13 deletions
|
@ -134,7 +134,7 @@
|
|||
##
|
||||
# @stop:
|
||||
#
|
||||
# Stop all guest VCPU execution.
|
||||
# Stop guest VM execution.
|
||||
#
|
||||
# Since: 0.14
|
||||
#
|
||||
|
@ -143,6 +143,9 @@
|
|||
# the guest remains paused once migration finishes, as if the -S
|
||||
# option was passed on the command line.
|
||||
#
|
||||
# In the "suspended" state, it will completely stop the VM and
|
||||
# cause a transition to the "paused" state. (Since 9.0)
|
||||
#
|
||||
# Example:
|
||||
#
|
||||
# -> { "execute": "stop" }
|
||||
|
@ -153,7 +156,7 @@
|
|||
##
|
||||
# @cont:
|
||||
#
|
||||
# Resume guest VCPU execution.
|
||||
# Resume guest VM execution.
|
||||
#
|
||||
# Since: 0.14
|
||||
#
|
||||
|
@ -165,6 +168,10 @@
|
|||
# guest starts once migration finishes, removing the effect of the
|
||||
# -S command line option if it was passed.
|
||||
#
|
||||
# If the VM was previously suspended, and not been reset or woken,
|
||||
# this command will transition back to the "suspended" state.
|
||||
# (Since 9.0)
|
||||
#
|
||||
# Example:
|
||||
#
|
||||
# -> { "execute": "cont" }
|
||||
|
|
|
@ -102,7 +102,7 @@
|
|||
##
|
||||
# @StatusInfo:
|
||||
#
|
||||
# Information about VCPU run state
|
||||
# Information about VM run state
|
||||
#
|
||||
# @running: true if all VCPUs are runnable, false if not runnable
|
||||
#
|
||||
|
@ -130,9 +130,9 @@
|
|||
##
|
||||
# @query-status:
|
||||
#
|
||||
# Query the run status of all VCPUs
|
||||
# Query the run status of the VM
|
||||
#
|
||||
# Returns: @StatusInfo reflecting all VCPUs
|
||||
# Returns: @StatusInfo reflecting the VM
|
||||
#
|
||||
# Since: 0.14
|
||||
#
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue