|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [qemu-xen-traditional master] Add exit notifiers.
commit eb9bf793f5857ab5ca850bfecba4f11496881500
Author: Gerd Hoffmann <kraxel@xxxxxxxxxx>
AuthorDate: Fri Mar 13 12:35:26 2020 +0000
Commit: Ian Jackson <ian.jackson@xxxxxxxxxxxxx>
CommitDate: Fri Apr 24 15:43:09 2020 +0100
Add exit notifiers.
Hook up any cleanup work which needs to be done here. Advantages over
using atexit(3):
(1) You get passed in a pointer to the notifier. If you embed that
into your state struct you can use container_of() to get get your
state info.
(2) You can unregister, say when un-plugging a device.
Signed-off-by: Anthony Liguori <aliguori@xxxxxxxxxx>
(cherry picked from commit fd42deeb4cb42f90084046e3ebdb4383953195e3)
Signed-off-by: Maximilian Heyne <mheyne@xxxxxxxxx>
Reviewed-by: Paul Durrant <paul@xxxxxxx>
Acked-by: Ian Jackson <ian.jackson@xxxxxxxxxxxxx>
---
sysemu.h | 5 +++++
vl.c | 20 ++++++++++++++++++++
2 files changed, 25 insertions(+)
diff --git a/sysemu.h b/sysemu.h
index 968258a8..759d0e9d 100644
--- a/sysemu.h
+++ b/sysemu.h
@@ -2,6 +2,8 @@
#define SYSEMU_H
/* Misc. things related to the system emulator. */
+#include "notify.h"
+
/* vl.c */
extern const char *bios_name;
extern const char *bios_dir;
@@ -39,6 +41,9 @@ void qemu_system_powerdown(void);
#endif
void qemu_system_reset(void);
+void qemu_add_exit_notifier(Notifier *notify);
+void qemu_remove_exit_notifier(Notifier *notify);
+
void do_savevm(const char *name);
void do_loadvm(const char *name);
void do_delvm(const char *name);
diff --git a/vl.c b/vl.c
index c3c5d630..2163217e 100644
--- a/vl.c
+++ b/vl.c
@@ -282,6 +282,9 @@ uint8_t qemu_uuid[16];
#include "xen-vl-extra.c"
+static NotifierList exit_notifiers =
+ NOTIFIER_LIST_INITIALIZER(exit_notifiers);
+
/***********************************************************/
/* x86 ISA bus support */
@@ -4843,6 +4846,21 @@ static void vcpu_hex_str_to_bitmap(const char *optarg)
}
}
+void qemu_add_exit_notifier(Notifier *notify)
+{
+ notifier_list_add(&exit_notifiers, notify);
+}
+
+void qemu_remove_exit_notifier(Notifier *notify)
+{
+ notifier_list_remove(notify);
+}
+
+static void qemu_run_exit_notifiers(void)
+{
+ notifier_list_notify(&exit_notifiers);
+}
+
int main(int argc, char **argv, char **envp)
{
#ifdef CONFIG_GDBSTUB
@@ -4887,6 +4905,8 @@ int main(int argc, char **argv, char **envp)
const char *chroot_dir = NULL;
const char *run_as = NULL;
+ atexit(qemu_run_exit_notifiers);
+
qemu_cache_utils_init(envp);
logfile = stderr; /* initial value */
--
generated by git-patchbot for /home/xen/git/qemu-xen-traditional.git#master
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |