[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-arm] [Qemu-devel] [PATCH v2] event: Add source information to
From: |
Eric Blake |
Subject: |
Re: [Qemu-arm] [Qemu-devel] [PATCH v2] event: Add source information to SHUTDOWN |
Date: |
Thu, 20 Apr 2017 08:31:13 -0500 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.0 |
On 04/20/2017 06:59 AM, Markus Armbruster wrote:
>
> No objection to Alistair's idea to turn this into an enumeration.
Question - should the enum be more than just 'guest' and 'host'? For
example, my patch proves that we have a lot of places that handle
complimentary machine commands to reset and shutdown, and that whether
'reset' triggers a reset (and the guest keeps running as if rebooted) or
a shutdown is then based on the command-line arguments given to qemu.
So having the enum differentiate between 'guest-reset' and
'guest-shutdown' would be a possibility, if we want the enum to have
additional states.
>> +++ b/vl.c
>> @@ -1717,7 +1717,7 @@ void qemu_system_guest_panicked(GuestPanicInformation
>> *info)
>> if (!no_shutdown) {
>> qapi_event_send_guest_panicked(GUEST_PANIC_ACTION_POWEROFF,
>> !!info, info, &error_abort);
>> - qemu_system_shutdown_request();
>> + qemu_system_shutdown_request(false);
>
> Panicking is a guest action. Whether the shutdown on panic should be
> attributed to guest or host is perhaps debatable.
And it relates to the idea that a guest request for a 'reset' turns into
a qemu response of 'shutdown'. After all, whether a guest panic results
in a shutdown action is determined by command-line arguments to qemu.
So if we DO want to differentiate between a guest panic and a normal
guest shutdown, when both events are wired at the command line to cause
the SHUTDOWN action, then that's another enum to add to my list.
>> +++ b/replay/replay.c
>> @@ -51,7 +51,10 @@ bool replay_next_event_is(int event)
>> switch (replay_state.data_kind) {
>> case EVENT_SHUTDOWN:
>> replay_finish_event();
>> - qemu_system_shutdown_request();
>> + /* TODO: track source of shutdown request, to replay a
>> + * guest-initiated request rather than always claiming to
>> + * be from the host? */
>> + qemu_system_shutdown_request(false);
>
> This is what your "need a followup patch" refers to. I'd like to have
> an opinion from someone familiar with replay on what exactly we need
> here.
replay-internal.h has an enum ReplayEvents, which is a list of one-byte
codes used in the replay data stream to record which event to replay. I
don't know if it is easier to change the replay stream to add a 2-byte
code (shutdown-with-cause, followed by an encoding of the cause enum),
or a range of one-byte codes (one new code per number of enum members).
I also don't know how easy or hard it is to extend the enum (are we free
to add events in the middle, or are we worried about back-compat to an
older replay stream that must still play correctly with a newer qemu,
such that new events must be higher than all existing events).
So yes, I'm hoping for feedback from someone familiar with replay.
>
> Amazing number of ways to shut down or reset a machine.
And as I said, it would be easier to submit a patch with less churn by
having the uncommon case (host-triggered) call a new
qemu_system_shutdown_request_reason(enum), while the common case
(guest-triggered) be handled by having qemu_system_shutdown_request()
with no arguments call
qemu_system_shutdown_request_reason(SHUTDOWN_GUEST). I'm just worried
that doing it that way makes it easy for yet another new host shutdown
method to use the wrong wrapper.
>
> Looks sane on first glance.
>
--
Eric Blake, Principal Software Engineer
Red Hat, Inc. +1-919-301-3266
Virtualization: qemu.org | libvirt.org
signature.asc
Description: OpenPGP digital signature
Re: [Qemu-arm] [Qemu-devel] [PATCH v2] event: Add source information to SHUTDOWN, Eric Blake, 2017/04/20