qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH] runstate: cleanup reboot and panic actions


From: Alejandro Jimenez
Subject: Re: [PATCH] runstate: cleanup reboot and panic actions
Date: Wed, 20 Jan 2021 13:09:17 -0500
User-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101 Thunderbird/78.6.1



On 1/20/2021 9:37 AM, Paolo Bonzini wrote:
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.

Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
  qapi/run-state.json       | 10 ++++++----
  qemu-options.hx           |  8 ++++----
  softmmu/runstate-action.c |  4 ++--
  softmmu/runstate.c        |  7 ++++---
  softmmu/vl.c              |  2 +-
  5 files changed, 17 insertions(+), 14 deletions(-)


diff --git a/softmmu/runstate-action.c b/softmmu/runstate-action.c
index 99ce880886..ae0761a9c3 100644
--- a/softmmu/runstate-action.c
+++ b/softmmu/runstate-action.c
@@ -13,9 +13,9 @@
  #include "qapi/error.h"
  #include "qemu/option_int.h"
-RebootAction reboot_action = REBOOT_ACTION_NONE;
+RebootAction reboot_action = REBOOT_ACTION_RESET;
  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

Hi Paolo,
Since you have removed the need for "fixing" the panic action when -no-shutdown (or its equivalent action/qmp command) is issued, I'd also remove the following comment on qmp_set_action():

     /* Process shutdown last, in case the panic action needs to be altered */
     if (has_shutdown) {
         shutdown_action = shutdown;
     }

diff --git a/softmmu/runstate.c b/softmmu/runstate.c
index 6177693a30..beee050815 100644
--- a/softmmu/runstate.c
+++ b/softmmu/runstate.c
@@ -471,14 +471,15 @@ void qemu_system_guest_panicked(GuestPanicInformation 
*info)
      }
      /*
       * 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.
       */
-    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,
                                          !!info, info);
          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,
                                         !!info, info);
          vm_stop(RUN_STATE_GUEST_PANICKED);

I see that you are moving forward with only sending the GUEST_PANICKED event once.

Reviewed-by: Alejandro Jimenez <alejandro.j.jimenez@oracle.com>

diff --git a/softmmu/vl.c b/softmmu/vl.c
index 7ddf405d76..59304261cf 100644
--- a/softmmu/vl.c
+++ b/softmmu/vl.c
@@ -3202,7 +3202,7 @@ void qemu_init(int argc, char **argv, char **envp)
                  break;
              case QEMU_OPTION_no_shutdown:
                  olist = qemu_find_opts("action");
-                qemu_opts_parse_noisily(olist, "panic=pause,shutdown=pause", 
false);
+                qemu_opts_parse_noisily(olist, "shutdown=pause", false);
                  break;
              case QEMU_OPTION_uuid:
                  if (qemu_uuid_parse(optarg, &qemu_uuid) < 0) {




reply via email to

[Prev in Thread] Current Thread [Next in Thread]