[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [Qemu-devel] [PATCH v9 2/5] shutdown: Prepare for use of an enum in reset/shutdown_request
Eric Blake <eblake@xxxxxxxxxx> writes: > We want to track why a guest was shutdown; in particular, being able > to tell the difference between a guest request (such as ACPI request) > and host request (such as SIGINT) will prove useful to libvirt. > Since all requests eventually end up changing shutdown_requested in > vl.c, the logical change is to make that value track the reason, > rather than its current 0/1 contents. > > Since command-line options control whether a reset request is turned > into a shutdown request instead, the same treatment is given to > reset_requested. > > This patch adds an internal enum ShutdownCause that describes reasons > that a shutdown can be requested, and changes qemu_system_reset() to > pass the reason through, although for now nothing is actually changed > with regards to what gets reported. The enum could be exported via > QAPI at a later date, if deemed necessary, but for now, there has not > been a request to expose that much detail to end clients. > > For the most part, we turn 0 into SHUTDOWN_CAUSE_NONE, and 1 into > SHUTDOWN_CAUSE_HOST_ERROR; the only specific case where we have enough > information right now to use a different value is when we are reacting > to a host signal. It will take a further patch to edit all call-sites > that can trigger a reset or shutdown request to properly pass in any > other reasons; this patch includes TODOs to point such places out. > > qemu_system_reset() trades its 'bool report' parameter for a > 'ShutdownCause reason', with all non-zero values having the same > effect; this lets us get rid of the weird #defines for VMRESET_* > as synonyms for bools. This paragraph could perhaps be merged with the other one on qemu_system_reset(), but it's not worth a respin. > > Signed-off-by: Eric Blake <eblake@xxxxxxxxxx> > > --- > v9: one more stray FIXME > v8: s/FIXME/TODO/, include SHUTDOWN_CAUSE__MAX now rather than later, > tweak comment on GUEST_SHUTDOWN to mention suspend > v7: drop 'bool report' from qemu_system_reset(), reorder enum to put > HOST_ERROR == 1, improve commit message > v6: make ShutdownCause internal-only, add SHUTDOWN_CAUSE_NONE so that > comparison to 0 still works, tweak initial FIXME values > v5: no change > v4: s/ShutdownType/ShutdownCause/, no thanks to mingw header pollution > v3: new patch > --- > include/sysemu/sysemu.h | 23 ++++++++++++++++----- > vl.c | 53 > ++++++++++++++++++++++++++++++------------------- > hw/i386/xen/xen-hvm.c | 7 +++++-- > migration/colo.c | 2 +- > migration/savevm.c | 2 +- > 5 files changed, 58 insertions(+), 29 deletions(-) > > diff --git a/include/sysemu/sysemu.h b/include/sysemu/sysemu.h > index 15656b7..52102fd 100644 > --- a/include/sysemu/sysemu.h > +++ b/include/sysemu/sysemu.h > @@ -33,8 +33,21 @@ VMChangeStateEntry > *qemu_add_vm_change_state_handler(VMChangeStateHandler *cb, > void qemu_del_vm_change_state_handler(VMChangeStateEntry *e); > void vm_state_notify(int running, RunState state); > > -#define VMRESET_SILENT false > -#define VMRESET_REPORT true > +/* Enumeration of various causes for shutdown. */ > +typedef enum ShutdownCause { > + SHUTDOWN_CAUSE_NONE, /* No shutdown request pending */ > + SHUTDOWN_CAUSE_HOST_ERROR, /* An error prevents further use of guest > */ > + SHUTDOWN_CAUSE_HOST_QMP, /* Reaction to a QMP command, like 'quit' > */ > + SHUTDOWN_CAUSE_HOST_SIGNAL, /* Reaction to a signal, such as SIGINT */ > + SHUTDOWN_CAUSE_HOST_UI, /* Reaction to UI event, like window close > */ > + SHUTDOWN_CAUSE_GUEST_SHUTDOWN,/* Guest shutdown/suspend request, via > + ACPI or other hardware-specific means */ > + SHUTDOWN_CAUSE_GUEST_RESET, /* Guest reset request, and command line > + turns that into a shutdown */ > + SHUTDOWN_CAUSE_GUEST_PANIC, /* Guest panicked, and command line turns > + that into a shutdown */ > + SHUTDOWN_CAUSE__MAX, The __ is a bit odd for handwritten code, but it matches QAPI-generated code. Okay. > +} ShutdownCause; > > void vm_start(void); > int vm_prepare_start(void); Reviewed-by: Markus Armbruster <armbru@xxxxxxxxxx> _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx https://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |