qemu/hw
Daniel Henrique Barboza fb06411210 qmp hmp: Make system_wakeup check wake-up support and run state
The qmp/hmp command 'system_wakeup' is simply a direct call to
'qemu_system_wakeup_request' from vl.c. This function verifies if
runstate is SUSPENDED and if the wake up reason is valid before
proceeding. However, no error or warning is thrown if any of those
pre-requirements isn't met. There is no way for the caller to
differentiate between a successful wakeup or an error state caused
when trying to wake up a guest that wasn't suspended.

This means that system_wakeup is silently failing, which can be
considered a bug. Adding error handling isn't an API break in this
case - applications that didn't check the result will remain broken,
the ones that check it will have a chance to deal with it.

Adding to that, the commit before previous created a new QMP API called
query-current-machine, with a new flag called wakeup-suspend-support,
that indicates if the guest has the capability of waking up from suspended
state. Although such guest will never reach SUSPENDED state and erroring
it out in this scenario would suffice, it is more informative for the user
to differentiate between a failure because the guest isn't suspended versus
a failure because the guest does not have support for wake up at all.

All this considered, this patch changes qmp_system_wakeup to check if
the guest is capable of waking up from suspend, and if it is suspended.
After this patch, this is the output of system_wakeup in a guest that
does not have wake-up from suspend support (ppc64):

(qemu) system_wakeup
wake-up from suspend is not supported by this guest
(qemu)

And this is the output of system_wakeup in a x86 guest that has the
support but isn't suspended:

(qemu) system_wakeup
Unable to wake up: guest is not in suspended state
(qemu)

Reported-by: Balamuruhan S <bala24@linux.vnet.ibm.com>
Signed-off-by: Daniel Henrique Barboza <danielhb413@gmail.com>
Message-Id: <20181205194701.17836-4-danielhb413@gmail.com>
Reviewed-by: Markus Armbruster <armbru@redhat.com>
Acked-by: Eduardo Habkost <ehabkost@redhat.com>
Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: Markus Armbruster <armbru@redhat.com>
2018-12-18 07:55:47 +01:00
..
9pfs 9p: remove support for the "handle" backend 2018-12-12 14:18:10 +01:00
acpi qmp hmp: Make system_wakeup check wake-up support and run state 2018-12-18 07:55:47 +01:00
adc Include qapi/error.h exactly where needed 2018-02-09 13:50:17 +01:00
alpha hw/alpha/typhoon: Remove unuseful code 2018-10-24 06:44:59 -03:00
arm miscellaneous patches: 2018-12-16 16:32:43 +00:00
audio audio/hda: fix guest triggerable assert 2018-11-27 07:47:57 +01:00
block miscellaneous patches: 2018-12-16 16:32:43 +00:00
bt hw/bt: Replace fprintf(stderr, "*\n" with error_report() 2018-01-22 09:51:00 +01:00
char qmp hmp: Make system_wakeup check wake-up support and run state 2018-12-18 07:55:47 +01:00
core miscellaneous patches: 2018-12-16 16:32:43 +00:00
cpu hw/cpu/a15mpcore: If CPU has EL2, enable it on the GIC and wire it up 2018-08-24 13:17:34 +01:00
cris hw/cris: Use the IEC binary prefix definitions 2018-07-02 15:41:15 +02:00
display display/g364fb: Convert sysbus init function to realize function 2018-12-13 13:47:57 +00:00
dma dma/puv3_dma: Convert sysbus init function to realize function 2018-12-13 13:47:58 +00:00
gpio gpio/puv3_gpio: Convert sysbus init function to realize function 2018-12-13 13:47:58 +00:00
hppa hw/hppa/dino: Remove unuseful code 2018-10-24 06:44:59 -03:00
hyperv hw/hyperv: fix NULL dereference with pure-kvm SynIC 2018-11-26 14:14:38 -02:00
i2c i2c: Move typedef of bitbang_i2c_interface to i2c.h 2018-12-12 10:01:13 +01:00
i386 qmp: query-current-machine with wakeup-suspend-support 2018-12-18 07:55:47 +01:00
ide replay: replay BH for IDE trim operation 2018-10-02 19:09:13 +02:00
input qmp hmp: Make system_wakeup check wake-up support and run state 2018-12-18 07:55:47 +01:00
intc miscellaneous patches: 2018-12-16 16:32:43 +00:00
ipack hw/ipack: Use the IEC binary prefix definitions 2018-07-02 15:41:12 +02:00
ipmi ipmi: Use proper struct reference for BT vmstate 2018-08-23 18:46:25 +02:00
isa configs: Add a CONFIG_SMC37C669 switch for the "smc37c669-superio" device 2018-10-24 07:33:44 +01:00
lm32 milkymist: Check for failure trying to load BIOS image 2018-11-06 11:32:14 +00:00
m68k hw/m68k: Use the IEC binary prefix definitions 2018-07-02 15:41:14 +02:00
mem memory-device: avoid overflows on very huge devices 2018-12-11 15:45:22 -02:00
microblaze hw/microblaze/xlnx-zynqmp-pmu: Fix introspection problem in 'xlnx, zynqmp-pmu-soc' 2018-07-23 15:21:25 +01:00
mips hw/mips/malta: Remove unuseful code 2018-10-24 06:44:59 -03:00
misc miscellaneous patches: 2018-12-16 16:32:43 +00:00
moxie change get_image_size return type to int64_t 2018-10-02 19:08:49 +02:00
net net: cadence_gem: Remove incorrect assert() 2018-11-26 13:41:42 +00:00
nios2 hw/nios2: Use the IEC binary prefix definitions 2018-07-02 15:41:15 +02:00
nvram nvram/ds1225y: Convert sysbus init function to realize function 2018-12-13 13:48:00 +00:00
openrisc Change references to serial_hds[] to serial_hd() 2018-04-26 13:57:00 +01:00
pci hw/pci/pci.c: Don't use load_image() 2018-12-14 13:30:51 +00:00
pci-bridge pci-bridge/dec: Convert sysbus init function to realize function 2018-12-13 13:48:00 +00:00
pci-host ppc patch queue 2018-11-08 2018-11-08 14:42:37 +00:00
pcmcia
ppc hw/ppc/ppc405_boards: Don't use load_image() 2018-12-14 13:30:50 +00:00
rdma config: split PVRDMA from RDMA 2018-08-18 18:01:34 +03:00
riscv hw/riscv/virt: Free the test device tree node name 2018-11-13 15:12:13 -08:00
s390x hw/s390x/virtio-ccw.c: Don't take address of fields in packed structs 2018-12-12 10:39:28 +01:00
scsi vmstate: constify VMStateField 2018-11-27 15:35:15 +01:00
sd hw/sd/sdhci: Don't leak memory region in sdhci_sysbus_realize() 2018-12-14 13:30:54 +00:00
sh4 hw/sh4/sh_pci: Use DeviceState::realize rather than SysBusDevice::init 2018-10-24 06:44:59 -03:00
smbios hw/smbios/smbios.c: Don't use load_image() 2018-12-14 13:30:50 +00:00
sparc Rename cpu_physical_memory_write_rom() to address_space_write_rom() 2018-12-14 13:30:48 +00:00
sparc64 hw/sparc64/niagara: Model the I/O Bridge with the 'unimplemented_device' 2018-10-24 06:44:59 -03:00
ssi hw/ssi/xilinx_spi: Use DeviceState::realize rather than SysBusDevice::init 2018-10-24 06:44:59 -03:00
timer qmp hmp: Make system_wakeup check wake-up support and run state 2018-12-18 07:55:47 +01:00
tpm tpm: Make sure the locality received from backend is valid 2018-12-04 10:21:25 -05:00
tricore hw/tricore: Use the IEC binary prefix definitions 2018-07-02 15:41:14 +02:00
unicore32 hw/input/i8042: Extract declarations from i386/pc.h into input/i8042.h 2018-03-12 16:12:48 +01:00
usb usb: fixes for mtp, ehci, usb-host and pvusb (xen). 2018-12-16 12:05:08 +00:00
vfio vfio-ap: flag as compatible with balloon 2018-12-12 10:39:28 +01:00
virtio Trivial patches (2018-12-11) 2018-12-11 22:26:44 +00:00
watchdog qapi: Drop qapi_event_send_FOO()'s Error ** argument 2018-08-28 18:21:38 +02:00
xen xen_backend: remove xen_sysdev_init() function 2018-12-13 13:48:02 +00:00
xenpv hw/xen: Use the IEC binary prefix definitions 2018-07-02 15:41:13 +02:00
xtensa target/xtensa: xtfpga: provide default memory sizes 2018-11-21 10:53:21 -08:00
Makefile.objs memory-device: introduce separate config option 2018-10-24 06:44:59 -03:00