Message ID | 20200114023102.612548-3-pizhenwei@bytedance.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | pvpanic: implement crashloaded event for pvpanic | expand |
On 14/01/20 03:31, zhenwei pi wrote:
> +# @info: information about a panic (since 2.9)
Removed this "since 2.9" and queued both patches, thanks.
Paolo
On 1/13/20 8:31 PM, zhenwei pi wrote: > Handle bit 1 write, then post event to monitor. > > Suggested by Paolo, declear a new event, using GUEST_PANICKED could > cause upper layers to react by shutting down or rebooting the guest. > > In advance for extention, add GuestPanicInformation in event message. > > Signed-off-by: zhenwei pi <pizhenwei@bytedance.com> > --- > +++ b/qapi/run-state.json > @@ -357,6 +357,26 @@ > 'data': { 'action': 'GuestPanicAction', '*info': 'GuestPanicInformation' } } > > ## > +# @GUEST_CRASHLOADED: > +# > +# Emitted when guest OS crash loaded is detected > +# > +# @action: action that has been taken, currently always "run" > +# > +# @info: information about a panic (since 2.9) > +# > +# Since: 5.0 Paolo already caught that the 'since 2.9' makes no sense if the interface itself is since 5.0. > +# > +# Example: > +# > +# <- { "event": "GUEST_CRASHLOADED", > +# "data": { "action": "run" } } > +# > +## > +{ 'event': 'GUEST_CRASHLOADED', > + 'data': { 'action': 'GuestPanicAction', '*info': 'GuestPanicInformation' } } > + > +## > # @GuestPanicAction: > # > # An enumeration of the actions taken when guest OS panic is detected > @@ -366,7 +386,7 @@ > # Since: 2.1 (poweroff since 2.8) > ## > { 'enum': 'GuestPanicAction', > - 'data': [ 'pause', 'poweroff' ] } > + 'data': [ 'pause', 'poweroff', 'run' ] } But the comment here could be updated to mention 'run' since 5.0, alongside poweroff since 2.8. Not the end of the world if we don't annotate it, though, since instrospection still shows the difference.
On 20/01/20 20:12, Eric Blake wrote: >> +# >> +# Example: >> +# >> +# <- { "event": "GUEST_CRASHLOADED", >> +# "data": { "action": "run" } } >> +# >> +## >> +{ 'event': 'GUEST_CRASHLOADED', >> + 'data': { 'action': 'GuestPanicAction', '*info': >> 'GuestPanicInformation' } } >> + >> +## >> # @GuestPanicAction: >> # >> # An enumeration of the actions taken when guest OS panic is detected >> @@ -366,7 +386,7 @@ >> # Since: 2.1 (poweroff since 2.8) >> ## >> { 'enum': 'GuestPanicAction', >> - 'data': [ 'pause', 'poweroff' ] } >> + 'data': [ 'pause', 'poweroff', 'run' ] } > > But the comment here could be updated to mention 'run' since 5.0, > alongside poweroff since 2.8. Not the end of the world if we don't > annotate it, though, since instrospection still shows the difference. Done in my local branch.
diff --git a/hw/misc/pvpanic.c b/hw/misc/pvpanic.c index d65ac86478..4ebda7872a 100644 --- a/hw/misc/pvpanic.c +++ b/hw/misc/pvpanic.c @@ -21,11 +21,13 @@ #include "hw/qdev-properties.h" #include "hw/misc/pvpanic.h" -/* The bit of supported pv event */ +/* The bit of supported pv event, TODO: include uapi header and remove this */ #define PVPANIC_F_PANICKED 0 +#define PVPANIC_F_CRASHLOADED 1 /* The pv event value */ #define PVPANIC_PANICKED (1 << PVPANIC_F_PANICKED) +#define PVPANIC_CRASHLOADED (1 << PVPANIC_F_CRASHLOADED) #define ISA_PVPANIC_DEVICE(obj) \ OBJECT_CHECK(PVPanicState, (obj), TYPE_PVPANIC) @@ -34,7 +36,7 @@ static void handle_event(int event) { static bool logged; - if (event & ~PVPANIC_PANICKED && !logged) { + if (event & ~(PVPANIC_PANICKED | PVPANIC_CRASHLOADED) && !logged) { qemu_log_mask(LOG_GUEST_ERROR, "pvpanic: unknown event %#x.\n", event); logged = true; } @@ -43,6 +45,11 @@ static void handle_event(int event) qemu_system_guest_panicked(NULL); return; } + + if (event & PVPANIC_CRASHLOADED) { + qemu_system_guest_crashloaded(NULL); + return; + } } #include "hw/isa/isa.h" diff --git a/include/sysemu/runstate.h b/include/sysemu/runstate.h index 0b41555609..f760094858 100644 --- a/include/sysemu/runstate.h +++ b/include/sysemu/runstate.h @@ -63,6 +63,7 @@ ShutdownCause qemu_reset_requested_get(void); void qemu_system_killed(int signal, pid_t pid); void qemu_system_reset(ShutdownCause reason); void qemu_system_guest_panicked(GuestPanicInformation *info); +void qemu_system_guest_crashloaded(GuestPanicInformation *info); #endif diff --git a/qapi/run-state.json b/qapi/run-state.json index d7477cd715..b7a91f3125 100644 --- a/qapi/run-state.json +++ b/qapi/run-state.json @@ -357,6 +357,26 @@ 'data': { 'action': 'GuestPanicAction', '*info': 'GuestPanicInformation' } } ## +# @GUEST_CRASHLOADED: +# +# Emitted when guest OS crash loaded is detected +# +# @action: action that has been taken, currently always "run" +# +# @info: information about a panic (since 2.9) +# +# Since: 5.0 +# +# Example: +# +# <- { "event": "GUEST_CRASHLOADED", +# "data": { "action": "run" } } +# +## +{ 'event': 'GUEST_CRASHLOADED', + 'data': { 'action': 'GuestPanicAction', '*info': 'GuestPanicInformation' } } + +## # @GuestPanicAction: # # An enumeration of the actions taken when guest OS panic is detected @@ -366,7 +386,7 @@ # Since: 2.1 (poweroff since 2.8) ## { 'enum': 'GuestPanicAction', - 'data': [ 'pause', 'poweroff' ] } + 'data': [ 'pause', 'poweroff', 'run' ] } ## # @GuestPanicInformationType: diff --git a/vl.c b/vl.c index 86474a55c9..5b1b2ef095 100644 --- a/vl.c +++ b/vl.c @@ -1468,6 +1468,18 @@ void qemu_system_guest_panicked(GuestPanicInformation *info) } } +void qemu_system_guest_crashloaded(GuestPanicInformation *info) +{ + qemu_log_mask(LOG_GUEST_ERROR, "Guest crash loaded"); + + qapi_event_send_guest_crashloaded(GUEST_PANIC_ACTION_RUN, + !!info, info); + + if (info) { + qapi_free_GuestPanicInformation(info); + } +} + void qemu_system_reset_request(ShutdownCause reason) { if (no_reboot && reason != SHUTDOWN_CAUSE_SUBSYSTEM_RESET) {
Handle bit 1 write, then post event to monitor. Suggested by Paolo, declear a new event, using GUEST_PANICKED could cause upper layers to react by shutting down or rebooting the guest. In advance for extention, add GuestPanicInformation in event message. Signed-off-by: zhenwei pi <pizhenwei@bytedance.com> --- hw/misc/pvpanic.c | 11 +++++++++-- include/sysemu/runstate.h | 1 + qapi/run-state.json | 22 +++++++++++++++++++++- vl.c | 12 ++++++++++++ 4 files changed, 43 insertions(+), 3 deletions(-)