qemu-e2k/qapi
Steve Sistare b9ae473d80 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>
2024-01-04 09:52:42 +08:00
..
acpi.json
audio.json
authz.json
block-core.json
block-export.json
block.json
char.json
common.json
compat.json
control.json
crypto.json
cryptodev.json
cxl.json
dump.json
error.json
introspect.json
job.json
machine-common.json
machine-target.json
machine.json
meson.build
migration.json qapi/migration.json: spelling: transfering 2023-11-15 11:09:17 +03:00
misc-target.json
misc.json cpus: stop vm in suspended runstate 2024-01-04 09:52:42 +08:00
net.json
opts-visitor.c
pci.json
pragma.json qapi/pragma.json: Improve the comment about the lists of QAPI rule exceptions 2023-11-15 11:09:17 +03:00
qapi-clone-visitor.c
qapi-dealloc-visitor.c
qapi-forward-visitor.c
qapi-schema.json
qapi-type-helpers.c
qapi-util.c
qapi-visit-core.c
qdev.json
qmp-dispatch.c
qmp-event.c
qmp-registry.c
qobject-input-visitor.c
qobject-output-visitor.c
qom.json backends/iommufd: Introduce the iommufd object 2023-12-19 19:03:38 +01:00
rdma.json
replay.json
rocker.json
run-state.json cpus: stop vm in suspended runstate 2024-01-04 09:52:42 +08:00
sockets.json
stats.json
string-input-visitor.c
string-output-visitor.c string-output-visitor: show structs as "<omitted>" 2023-12-21 22:49:28 +01:00
tpm.json
trace-events
trace.h
trace.json
transaction.json
ui.json
virtio.json qdev: add IOThreadVirtQueueMappingList property type 2023-12-21 22:49:28 +01:00
yank.json