runstate: cleanup reboot and panic actions

The possible choices for panic, reset and watchdog actions are inconsistent.

"-action panic=poweroff" should be renamed to "-action panic=shutdown"
on the command line.  This is because "-action panic=poweroff" and
"-action watchdog=poweroff" have slightly different semantics, the first
does an unorderly exit while the second goes through qemu_cleanup().  With
this change, -no-shutdown would not have to change "-action panic=pause"
"pause", just like it does not have to change the reset action.

"-action reboot=none" should be renamed to "-action reboot=reset".
This should be self explanatory, since for example "-action panic=none"
lets the guest proceed without taking any action.

Reviewed-by: Eric Blake <eblake@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
Paolo Bonzini 2021-01-20 14:30:27 +01:00
parent fef80ea073
commit c27025e044
5 changed files with 17 additions and 14 deletions

View File

@ -330,14 +330,14 @@
# #
# Possible QEMU actions upon guest reboot # Possible QEMU actions upon guest reboot
# #
# @none: Reset the VM # @reset: Reset the VM
# #
# @shutdown: Shutdown the VM and exit # @shutdown: Shutdown the VM and exit, according to the shutdown action
# #
# Since: 6.0 # Since: 6.0
## ##
{ 'enum': 'RebootAction', { 'enum': 'RebootAction',
'data': [ 'none', 'shutdown' ] } 'data': [ 'reset', 'shutdown' ] }
## ##
# @ShutdownAction: # @ShutdownAction:
@ -360,10 +360,12 @@
# #
# @pause: Pause the VM # @pause: Pause the VM
# #
# @shutdown: Shutdown the VM and exit, according to the shutdown action
#
# Since: 6.0 # Since: 6.0
## ##
{ 'enum': 'PanicAction', { 'enum': 'PanicAction',
'data': [ 'poweroff', 'pause', 'none' ] } 'data': [ 'pause', 'shutdown', 'none' ] }
## ##
# @watchdog-set-action: # @watchdog-set-action:

View File

@ -3900,12 +3900,12 @@ SRST
ERST ERST
DEF("action", HAS_ARG, QEMU_OPTION_action, DEF("action", HAS_ARG, QEMU_OPTION_action,
"-action reboot=none|shutdown\n" "-action reboot=reset|shutdown\n"
" action when guest reboots [default=none]\n" " action when guest reboots [default=reset]\n"
"-action shutdown=poweroff|pause\n" "-action shutdown=poweroff|pause\n"
" action when guest shuts down [default=poweroff]\n" " action when guest shuts down [default=poweroff]\n"
"-action panic=poweroff|pause|none\n" "-action panic=pause|shutdown|none\n"
" action when guest panics [default=poweroff]\n" " action when guest panics [default=shutdown]\n"
"-action watchdog=reset|shutdown|poweroff|inject-nmi|pause|debug|none\n" "-action watchdog=reset|shutdown|poweroff|inject-nmi|pause|debug|none\n"
" action when watchdog fires [default=reset]\n", " action when watchdog fires [default=reset]\n",
QEMU_ARCH_ALL) QEMU_ARCH_ALL)

View File

@ -13,9 +13,9 @@
#include "qapi/error.h" #include "qapi/error.h"
#include "qemu/option_int.h" #include "qemu/option_int.h"
RebootAction reboot_action = REBOOT_ACTION_NONE; RebootAction reboot_action = REBOOT_ACTION_RESET;
ShutdownAction shutdown_action = SHUTDOWN_ACTION_POWEROFF; ShutdownAction shutdown_action = SHUTDOWN_ACTION_POWEROFF;
PanicAction panic_action = PANIC_ACTION_POWEROFF; PanicAction panic_action = PANIC_ACTION_SHUTDOWN;
/* /*
* Receives actions to be applied for specific guest events * Receives actions to be applied for specific guest events

View File

@ -471,14 +471,15 @@ void qemu_system_guest_panicked(GuestPanicInformation *info)
} }
/* /*
* TODO: Currently the available panic actions are: none, pause, and * TODO: Currently the available panic actions are: none, pause, and
* poweroff, but in principle debug and reset could be supported as well. * shutdown, but in principle debug and reset could be supported as well.
* Investigate any potential use cases for the unimplemented actions. * Investigate any potential use cases for the unimplemented actions.
*/ */
if (panic_action == PANIC_ACTION_PAUSE) { if (panic_action == PANIC_ACTION_PAUSE
|| (panic_action == PANIC_ACTION_SHUTDOWN && shutdown_action == SHUTDOWN_ACTION_PAUSE)) {
qapi_event_send_guest_panicked(GUEST_PANIC_ACTION_PAUSE, qapi_event_send_guest_panicked(GUEST_PANIC_ACTION_PAUSE,
!!info, info); !!info, info);
vm_stop(RUN_STATE_GUEST_PANICKED); vm_stop(RUN_STATE_GUEST_PANICKED);
} else if (panic_action == PANIC_ACTION_POWEROFF) { } else if (panic_action == PANIC_ACTION_SHUTDOWN) {
qapi_event_send_guest_panicked(GUEST_PANIC_ACTION_POWEROFF, qapi_event_send_guest_panicked(GUEST_PANIC_ACTION_POWEROFF,
!!info, info); !!info, info);
vm_stop(RUN_STATE_GUEST_PANICKED); vm_stop(RUN_STATE_GUEST_PANICKED);

View File

@ -3202,7 +3202,7 @@ void qemu_init(int argc, char **argv, char **envp)
break; break;
case QEMU_OPTION_no_shutdown: case QEMU_OPTION_no_shutdown:
olist = qemu_find_opts("action"); olist = qemu_find_opts("action");
qemu_opts_parse_noisily(olist, "panic=pause,shutdown=pause", false); qemu_opts_parse_noisily(olist, "shutdown=pause", false);
break; break;
case QEMU_OPTION_uuid: case QEMU_OPTION_uuid:
if (qemu_uuid_parse(optarg, &qemu_uuid) < 0) { if (qemu_uuid_parse(optarg, &qemu_uuid) < 0) {