Message ID | 20181108160818.5485-20-yuval.shaia@oracle.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | Add support for RDMA MAD | expand |
On Thu, 8 Nov 2018 18:08:15 +0200 Yuval Shaia <yuval.shaia@oracle.com> wrote: > Notifier will be used for signaling shutdown event to inform system is > shutdown. This will allow devices and other component to run some > cleanup code needed before VM is shutdown. > > Signed-off-by: Yuval Shaia <yuval.shaia@oracle.com> > --- > include/sysemu/sysemu.h | 1 + > vl.c | 15 ++++++++++++++- > 2 files changed, 15 insertions(+), 1 deletion(-) > > @@ -1809,6 +1811,12 @@ static void qemu_system_powerdown(void) > notifier_list_notify(&powerdown_notifiers, NULL); > } > > +static void qemu_system_shutdown(bool by_guest) I would pass the shutdown reason here directly (instead of only whether this was triggered by the guest or not)... > +{ > + qapi_event_send_shutdown(by_guest); > + notifier_list_notify(&shutdown_notifiers, NULL); ...and also pass it to the notifiers here. If we have the info anyway, why not simply pass it along. > +} > + > void qemu_system_powerdown_request(void) > { > trace_qemu_system_powerdown_request(); > @@ -1821,6 +1829,11 @@ void qemu_register_powerdown_notifier(Notifier *notifier) > notifier_list_add(&powerdown_notifiers, notifier); > } > > +void qemu_register_shutdown_notifier(Notifier *notifier) > +{ > + notifier_list_add(&shutdown_notifiers, notifier); > +} > + > void qemu_system_debug_request(void) > { > debug_requested = 1; > @@ -1848,7 +1861,7 @@ static bool main_loop_should_exit(void) > request = qemu_shutdown_requested(); > if (request) { > qemu_kill_report(); > - qapi_event_send_shutdown(shutdown_caused_by_guest(request)); > + qemu_system_shutdown(shutdown_caused_by_guest(request)); > if (no_shutdown) { > vm_stop(RUN_STATE_SHUTDOWN); > } else {
On Thu, Nov 08, 2018 at 05:26:06PM +0100, Cornelia Huck wrote: > On Thu, 8 Nov 2018 18:08:15 +0200 > Yuval Shaia <yuval.shaia@oracle.com> wrote: > > > Notifier will be used for signaling shutdown event to inform system is > > shutdown. This will allow devices and other component to run some > > cleanup code needed before VM is shutdown. > > > > Signed-off-by: Yuval Shaia <yuval.shaia@oracle.com> > > --- > > include/sysemu/sysemu.h | 1 + > > vl.c | 15 ++++++++++++++- > > 2 files changed, 15 insertions(+), 1 deletion(-) > > > > > @@ -1809,6 +1811,12 @@ static void qemu_system_powerdown(void) > > notifier_list_notify(&powerdown_notifiers, NULL); > > } > > > > +static void qemu_system_shutdown(bool by_guest) > > I would pass the shutdown reason here directly (instead of only whether > this was triggered by the guest or not)... > > > +{ > > + qapi_event_send_shutdown(by_guest); > > + notifier_list_notify(&shutdown_notifiers, NULL); > > ...and also pass it to the notifiers here. If we have the info anyway, > why not simply pass it along. Agree, make sense. > > > +} > > + > > void qemu_system_powerdown_request(void) > > { > > trace_qemu_system_powerdown_request(); > > @@ -1821,6 +1829,11 @@ void qemu_register_powerdown_notifier(Notifier *notifier) > > notifier_list_add(&powerdown_notifiers, notifier); > > } > > > > +void qemu_register_shutdown_notifier(Notifier *notifier) > > +{ > > + notifier_list_add(&shutdown_notifiers, notifier); > > +} > > + > > void qemu_system_debug_request(void) > > { > > debug_requested = 1; > > @@ -1848,7 +1861,7 @@ static bool main_loop_should_exit(void) > > request = qemu_shutdown_requested(); > > if (request) { > > qemu_kill_report(); > > - qapi_event_send_shutdown(shutdown_caused_by_guest(request)); > > + qemu_system_shutdown(shutdown_caused_by_guest(request)); > > if (no_shutdown) { > > vm_stop(RUN_STATE_SHUTDOWN); > > } else { >
diff --git a/include/sysemu/sysemu.h b/include/sysemu/sysemu.h index 8d6095d98b..0d15f16492 100644 --- a/include/sysemu/sysemu.h +++ b/include/sysemu/sysemu.h @@ -80,6 +80,7 @@ void qemu_register_wakeup_notifier(Notifier *notifier); void qemu_system_shutdown_request(ShutdownCause reason); void qemu_system_powerdown_request(void); void qemu_register_powerdown_notifier(Notifier *notifier); +void qemu_register_shutdown_notifier(Notifier *notifier); void qemu_system_debug_request(void); void qemu_system_vmstop_request(RunState reason); void qemu_system_vmstop_request_prepare(void); diff --git a/vl.c b/vl.c index 1fcacc5caa..c5ba750f3e 100644 --- a/vl.c +++ b/vl.c @@ -1578,6 +1578,8 @@ static NotifierList suspend_notifiers = NOTIFIER_LIST_INITIALIZER(suspend_notifiers); static NotifierList wakeup_notifiers = NOTIFIER_LIST_INITIALIZER(wakeup_notifiers); +static NotifierList shutdown_notifiers = + NOTIFIER_LIST_INITIALIZER(shutdown_notifiers); static uint32_t wakeup_reason_mask = ~(1 << QEMU_WAKEUP_REASON_NONE); ShutdownCause qemu_shutdown_requested_get(void) @@ -1809,6 +1811,12 @@ static void qemu_system_powerdown(void) notifier_list_notify(&powerdown_notifiers, NULL); } +static void qemu_system_shutdown(bool by_guest) +{ + qapi_event_send_shutdown(by_guest); + notifier_list_notify(&shutdown_notifiers, NULL); +} + void qemu_system_powerdown_request(void) { trace_qemu_system_powerdown_request(); @@ -1821,6 +1829,11 @@ void qemu_register_powerdown_notifier(Notifier *notifier) notifier_list_add(&powerdown_notifiers, notifier); } +void qemu_register_shutdown_notifier(Notifier *notifier) +{ + notifier_list_add(&shutdown_notifiers, notifier); +} + void qemu_system_debug_request(void) { debug_requested = 1; @@ -1848,7 +1861,7 @@ static bool main_loop_should_exit(void) request = qemu_shutdown_requested(); if (request) { qemu_kill_report(); - qapi_event_send_shutdown(shutdown_caused_by_guest(request)); + qemu_system_shutdown(shutdown_caused_by_guest(request)); if (no_shutdown) { vm_stop(RUN_STATE_SHUTDOWN); } else {
Notifier will be used for signaling shutdown event to inform system is shutdown. This will allow devices and other component to run some cleanup code needed before VM is shutdown. Signed-off-by: Yuval Shaia <yuval.shaia@oracle.com> --- include/sysemu/sysemu.h | 1 + vl.c | 15 ++++++++++++++- 2 files changed, 15 insertions(+), 1 deletion(-)