qemu-devel
[Top][All Lists]
Advanced

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

Re: [Qemu-devel] [Bug 1217339] [PATCH v2] Unix signal to send ACPI-shutd


From: Simon
Subject: Re: [Qemu-devel] [Bug 1217339] [PATCH v2] Unix signal to send ACPI-shutdown to Guest
Date: Sat, 18 Mar 2017 14:41:16 +0100
User-agent: Roundcube Webmail/1.1.2

Hi,

The patch below adds the new command-line option `-powerdown' which
changes the behavior for both SIGHUP and SIGINT signals to cause a clean
power down of the guest using an ACPI shutdown request.

If this option is not used, the original behavior is kept.

Regards,
Simon.

Signed-off-by: Simon Geusebroek <address@hidden>
---
diff -ru a/qemu-options.hx b/qemu-options.hx
--- a/qemu-options.hx   2016-12-20 21:16:49.000000000 +0100
+++ b/qemu-options.hx   2017-03-18 14:17:35.759915414 +0100
@@ -3322,6 +3322,19 @@
 disk image.
 ETEXI

+DEF("powerdown", 0, QEMU_OPTION_powerdown, \
+ "-powerdown Cleanly power down the guest on SIGINT or SIGHUP\n", \
+    QEMU_ARCH_ALL)
+STEXI
address@hidden -powerdown
address@hidden -powerdown
+Don't forcefully shutdown the guest upon SIGINT (Ctrl-C) or SIGHUP (terminal +closure) signals, but instead attempt to cleanly stop them using an ACPI
+shutdown request.
+Non ACPI-aware and stuck guests will remain up, the SIGTERM signal will still
+forcefully shutdown them.
+ETEXI
+
 DEF("loadvm", HAS_ARG, QEMU_OPTION_loadvm, \
     "-loadvm [tag|id]\n" \
" start right away with a saved state (loadvm in monitor)\n",
diff -ru a/vl.c b/vl.c
--- a/vl.c      2016-12-20 21:16:54.000000000 +0100
+++ b/vl.c      2017-03-18 13:48:21.227967255 +0100
@@ -164,6 +164,7 @@
 int fd_bootchk = 1;
 static int no_reboot;
 int no_shutdown = 0;
+int powerdown = 0;
 int cursor_hide = 1;
 int graphic_rotate = 0;
 const char *watchdog;
@@ -1871,7 +1872,11 @@
     /* Cannot call qemu_system_shutdown_request directly because
      * we are in a signal handler.
      */
-    shutdown_requested = 1;
+    if (powerdown == 1 && (signal == SIGINT || signal == SIGHUP)) {
+        powerdown_requested = 1;
+    } else {
+        shutdown_requested = 1;
+    }
     qemu_notify_event();
 }

@@ -3794,6 +3799,9 @@
             case QEMU_OPTION_no_shutdown:
                 no_shutdown = 1;
                 break;
+            case QEMU_OPTION_powerdown:
+                powerdown = 1;
+                break;
             case QEMU_OPTION_show_cursor:
                 cursor_hide = 0;
                 break;
--



reply via email to

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