[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 |