[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH v9 2/5] shutdown: Prepare for use of an enum in
From: |
Markus Armbruster |
Subject: |
Re: [Qemu-devel] [PATCH v9 2/5] shutdown: Prepare for use of an enum in reset/shutdown_request |
Date: |
Tue, 16 May 2017 10:40:04 +0200 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/25.2 (gnu/linux) |
Eric Blake <address@hidden> 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 <address@hidden>
>
> ---
> 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 <address@hidden>
- [Qemu-devel] [PATCH v9 0/5] event: Add source information to SHUTDOWN, Eric Blake, 2017/05/15
- [Qemu-devel] [PATCH v9 1/5] shutdown: Simplify shutdown_signal, Eric Blake, 2017/05/15
- [Qemu-devel] [PATCH v9 2/5] shutdown: Prepare for use of an enum in reset/shutdown_request, Eric Blake, 2017/05/15
- Re: [Qemu-devel] [PATCH v9 2/5] shutdown: Prepare for use of an enum in reset/shutdown_request,
Markus Armbruster <=
- [Qemu-devel] [PATCH v9 3/5] shutdown: Preserve shutdown cause through replay, Eric Blake, 2017/05/15
- [Qemu-devel] [PATCH v9 5/5] shutdown: Expose bool cause in SHUTDOWN and RESET events, Eric Blake, 2017/05/15
- [Qemu-devel] [PATCH v9 4/5] shutdown: Add source information to SHUTDOWN and RESET, Eric Blake, 2017/05/15
- Re: [Qemu-devel] [PATCH v9 0/5] event: Add source information to SHUTDOWN, Markus Armbruster, 2017/05/16