181 lines
6.5 KiB
Diff
181 lines
6.5 KiB
Diff
From c1502b0cd16378d6d5bd4259b90bf81a5fb5aad3 Mon Sep 17 00:00:00 2001
|
|
From: Claudio Imbrenda <imbrenda@linux.ibm.com>
|
|
Date: Fri, 5 May 2023 14:00:51 +0200
|
|
Subject: [PATCH 20/21] util/async-teardown: wire up query-command-line-options
|
|
MIME-Version: 1.0
|
|
Content-Type: text/plain; charset=UTF-8
|
|
Content-Transfer-Encoding: 8bit
|
|
|
|
RH-Author: Thomas Huth <thuth@redhat.com>
|
|
RH-MergeRequest: 173: Improve memory reclaiming for z15 Secure Execution guests
|
|
RH-Bugzilla: 2168500
|
|
RH-Acked-by: Cornelia Huck <cohuck@redhat.com>
|
|
RH-Acked-by: Miroslav Rezanina <mrezanin@redhat.com>
|
|
RH-Acked-by: Cédric Le Goater <clg@redhat.com>
|
|
RH-Commit: [1/2] 76e5f25df2c02721f5a29f552ee3061be589abb2 (thuth/qemu-kvm-cs9)
|
|
|
|
Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=2168500
|
|
|
|
Add new -run-with option with an async-teardown=on|off parameter. It is
|
|
visible in the output of query-command-line-options QMP command, so it
|
|
can be discovered and used by libvirt.
|
|
|
|
The option -async-teardown is now redundant, deprecate it.
|
|
|
|
Reported-by: Boris Fiuczynski <fiuczy@linux.ibm.com>
|
|
Fixes: c891c24b1a ("os-posix: asynchronous teardown for shutdown on Linux")
|
|
Signed-off-by: Claudio Imbrenda <imbrenda@linux.ibm.com>
|
|
Message-Id: <20230505120051.36605-2-imbrenda@linux.ibm.com>
|
|
[thuth: Add curly braces to fix error with GCC 8.5, fix bug in deprecated.rst]
|
|
Signed-off-by: Thomas Huth <thuth@redhat.com>
|
|
|
|
(cherry picked from commit 80bd81cadd127c1e2fc784612a52abe392670ba4)
|
|
Conflicts:
|
|
docs/about/deprecated.rst (missing context from other patches)
|
|
Signed-off-by: Thomas Huth <thuth@redhat.com>
|
|
---
|
|
docs/about/deprecated.rst | 5 +++++
|
|
os-posix.c | 14 ++++++++++++++
|
|
qemu-options.hx | 34 +++++++++++++++++++++++-----------
|
|
util/async-teardown.c | 21 +++++++++++++++++++++
|
|
4 files changed, 63 insertions(+), 11 deletions(-)
|
|
|
|
diff --git a/docs/about/deprecated.rst b/docs/about/deprecated.rst
|
|
index 1ca9dc33d6..52893fcf38 100644
|
|
--- a/docs/about/deprecated.rst
|
|
+++ b/docs/about/deprecated.rst
|
|
@@ -111,6 +111,11 @@ Use ``-machine acpi=off`` instead.
|
|
The HAXM project has been retired (see https://github.com/intel/haxm#status).
|
|
Use "whpx" (on Windows) or "hvf" (on macOS) instead.
|
|
|
|
+``-async-teardown`` (since 8.1)
|
|
+'''''''''''''''''''''''''''''''
|
|
+
|
|
+Use ``-run-with async-teardown=on`` instead.
|
|
+
|
|
|
|
QEMU Machine Protocol (QMP) commands
|
|
------------------------------------
|
|
diff --git a/os-posix.c b/os-posix.c
|
|
index 5adc69f560..90ea71725f 100644
|
|
--- a/os-posix.c
|
|
+++ b/os-posix.c
|
|
@@ -36,6 +36,8 @@
|
|
#include "qemu/log.h"
|
|
#include "sysemu/runstate.h"
|
|
#include "qemu/cutils.h"
|
|
+#include "qemu/config-file.h"
|
|
+#include "qemu/option.h"
|
|
|
|
#ifdef CONFIG_LINUX
|
|
#include <sys/prctl.h>
|
|
@@ -152,9 +154,21 @@ int os_parse_cmd_args(int index, const char *optarg)
|
|
daemonize = 1;
|
|
break;
|
|
#if defined(CONFIG_LINUX)
|
|
+ /* deprecated */
|
|
case QEMU_OPTION_asyncteardown:
|
|
init_async_teardown();
|
|
break;
|
|
+ case QEMU_OPTION_run_with: {
|
|
+ QemuOpts *opts = qemu_opts_parse_noisily(qemu_find_opts("run-with"),
|
|
+ optarg, false);
|
|
+ if (!opts) {
|
|
+ exit(1);
|
|
+ }
|
|
+ if (qemu_opt_get_bool(opts, "async-teardown", false)) {
|
|
+ init_async_teardown();
|
|
+ }
|
|
+ break;
|
|
+ }
|
|
#endif
|
|
default:
|
|
return -1;
|
|
diff --git a/qemu-options.hx b/qemu-options.hx
|
|
index 52b49f1f6a..b18f933703 100644
|
|
--- a/qemu-options.hx
|
|
+++ b/qemu-options.hx
|
|
@@ -4766,20 +4766,32 @@ DEF("qtest-log", HAS_ARG, QEMU_OPTION_qtest_log, "", QEMU_ARCH_ALL)
|
|
DEF("async-teardown", 0, QEMU_OPTION_asyncteardown,
|
|
"-async-teardown enable asynchronous teardown\n",
|
|
QEMU_ARCH_ALL)
|
|
-#endif
|
|
SRST
|
|
``-async-teardown``
|
|
- Enable asynchronous teardown. A new process called "cleanup/<QEMU_PID>"
|
|
- will be created at startup sharing the address space with the main qemu
|
|
- process, using clone. It will wait for the main qemu process to
|
|
- terminate completely, and then exit.
|
|
- This allows qemu to terminate very quickly even if the guest was
|
|
- huge, leaving the teardown of the address space to the cleanup
|
|
- process. Since the cleanup process shares the same cgroups as the
|
|
- main qemu process, accounting is performed correctly. This only
|
|
- works if the cleanup process is not forcefully killed with SIGKILL
|
|
- before the main qemu process has terminated completely.
|
|
+ This option is deprecated and should no longer be used. The new option
|
|
+ ``-run-with async-teardown=on`` is a replacement.
|
|
ERST
|
|
+DEF("run-with", HAS_ARG, QEMU_OPTION_run_with,
|
|
+ "-run-with async-teardown[=on|off]\n"
|
|
+ " misc QEMU process lifecycle options\n"
|
|
+ " async-teardown=on enables asynchronous teardown\n",
|
|
+ QEMU_ARCH_ALL)
|
|
+SRST
|
|
+``-run-with``
|
|
+ Set QEMU process lifecycle options.
|
|
+
|
|
+ ``async-teardown=on`` enables asynchronous teardown. A new process called
|
|
+ "cleanup/<QEMU_PID>" will be created at startup sharing the address
|
|
+ space with the main QEMU process, using clone. It will wait for the
|
|
+ main QEMU process to terminate completely, and then exit. This allows
|
|
+ QEMU to terminate very quickly even if the guest was huge, leaving the
|
|
+ teardown of the address space to the cleanup process. Since the cleanup
|
|
+ process shares the same cgroups as the main QEMU process, accounting is
|
|
+ performed correctly. This only works if the cleanup process is not
|
|
+ forcefully killed with SIGKILL before the main QEMU process has
|
|
+ terminated completely.
|
|
+ERST
|
|
+#endif
|
|
|
|
DEF("msg", HAS_ARG, QEMU_OPTION_msg,
|
|
"-msg [timestamp[=on|off]][,guest-name=[on|off]]\n"
|
|
diff --git a/util/async-teardown.c b/util/async-teardown.c
|
|
index 62cdeb0f20..3ab19c8740 100644
|
|
--- a/util/async-teardown.c
|
|
+++ b/util/async-teardown.c
|
|
@@ -12,6 +12,9 @@
|
|
*/
|
|
|
|
#include "qemu/osdep.h"
|
|
+#include "qemu/config-file.h"
|
|
+#include "qemu/option.h"
|
|
+#include "qemu/module.h"
|
|
#include <dirent.h>
|
|
#include <sys/prctl.h>
|
|
#include <sched.h>
|
|
@@ -144,3 +147,21 @@ void init_async_teardown(void)
|
|
clone(async_teardown_fn, new_stack_for_clone(), CLONE_VM, NULL);
|
|
sigprocmask(SIG_SETMASK, &old_signals, NULL);
|
|
}
|
|
+
|
|
+static QemuOptsList qemu_run_with_opts = {
|
|
+ .name = "run-with",
|
|
+ .head = QTAILQ_HEAD_INITIALIZER(qemu_run_with_opts.head),
|
|
+ .desc = {
|
|
+ {
|
|
+ .name = "async-teardown",
|
|
+ .type = QEMU_OPT_BOOL,
|
|
+ },
|
|
+ { /* end of list */ }
|
|
+ },
|
|
+};
|
|
+
|
|
+static void register_teardown(void)
|
|
+{
|
|
+ qemu_add_opts(&qemu_run_with_opts);
|
|
+}
|
|
+opts_init(register_teardown);
|
|
--
|
|
2.39.3
|
|
|