mirror of https://github.com/xemu-project/xemu.git
qapi event: convert GUEST_PANICKED
'monitor.h' is still included in target-s390x/kvm.c, since I have no good way to verify whether other code need it on my x86 host. Signed-off-by: Wenchao Xia <wenchaoqemu@gmail.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com> Reviewed-by: Eric Blake <eblake@redhat.com> Signed-off-by: Luiz Capitulino <lcapitulino@redhat.com>
This commit is contained in:
parent
aef9d3115f
commit
3a44969037
|
@ -1,20 +1,6 @@
|
||||||
QEMU Machine Protocol Events
|
QEMU Machine Protocol Events
|
||||||
============================
|
============================
|
||||||
|
|
||||||
GUEST_PANICKED
|
|
||||||
--------------
|
|
||||||
|
|
||||||
Emitted when guest OS panic is detected.
|
|
||||||
|
|
||||||
Data:
|
|
||||||
|
|
||||||
- "action": Action that has been taken (json-string, currently always "pause").
|
|
||||||
|
|
||||||
Example:
|
|
||||||
|
|
||||||
{ "event": "GUEST_PANICKED",
|
|
||||||
"data": { "action": "pause" } }
|
|
||||||
|
|
||||||
QUORUM_FAILURE
|
QUORUM_FAILURE
|
||||||
--------------
|
--------------
|
||||||
|
|
||||||
|
|
|
@ -14,12 +14,12 @@
|
||||||
|
|
||||||
#include "qapi/qmp/qobject.h"
|
#include "qapi/qmp/qobject.h"
|
||||||
#include "qapi/qmp/qjson.h"
|
#include "qapi/qmp/qjson.h"
|
||||||
#include "monitor/monitor.h"
|
|
||||||
#include "sysemu/sysemu.h"
|
#include "sysemu/sysemu.h"
|
||||||
#include "qemu/log.h"
|
#include "qemu/log.h"
|
||||||
|
|
||||||
#include "hw/nvram/fw_cfg.h"
|
#include "hw/nvram/fw_cfg.h"
|
||||||
#include "hw/i386/pc.h"
|
#include "hw/i386/pc.h"
|
||||||
|
#include "qapi-event.h"
|
||||||
|
|
||||||
/* The bit of supported pv event */
|
/* The bit of supported pv event */
|
||||||
#define PVPANIC_F_PANICKED 0
|
#define PVPANIC_F_PANICKED 0
|
||||||
|
@ -31,15 +31,6 @@
|
||||||
#define ISA_PVPANIC_DEVICE(obj) \
|
#define ISA_PVPANIC_DEVICE(obj) \
|
||||||
OBJECT_CHECK(PVPanicState, (obj), TYPE_ISA_PVPANIC_DEVICE)
|
OBJECT_CHECK(PVPanicState, (obj), TYPE_ISA_PVPANIC_DEVICE)
|
||||||
|
|
||||||
static void panicked_mon_event(const char *action)
|
|
||||||
{
|
|
||||||
QObject *data;
|
|
||||||
|
|
||||||
data = qobject_from_jsonf("{ 'action': %s }", action);
|
|
||||||
monitor_protocol_event(QEVENT_GUEST_PANICKED, data);
|
|
||||||
qobject_decref(data);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void handle_event(int event)
|
static void handle_event(int event)
|
||||||
{
|
{
|
||||||
static bool logged;
|
static bool logged;
|
||||||
|
@ -50,7 +41,7 @@ static void handle_event(int event)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (event & PVPANIC_PANICKED) {
|
if (event & PVPANIC_PANICKED) {
|
||||||
panicked_mon_event("pause");
|
qapi_event_send_guest_panicked(GUEST_PANIC_ACTION_PAUSE, &error_abort);
|
||||||
vm_stop(RUN_STATE_GUEST_PANICKED);
|
vm_stop(RUN_STATE_GUEST_PANICKED);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
|
@ -266,3 +266,15 @@
|
||||||
##
|
##
|
||||||
{ 'event': 'BALLOON_CHANGE',
|
{ 'event': 'BALLOON_CHANGE',
|
||||||
'data': { 'actual': 'int' } }
|
'data': { 'actual': 'int' } }
|
||||||
|
|
||||||
|
##
|
||||||
|
# @GUEST_PANICKED
|
||||||
|
#
|
||||||
|
# Emitted when guest OS panic is detected
|
||||||
|
#
|
||||||
|
# @action: action that has been taken, currently always "pause"
|
||||||
|
#
|
||||||
|
# Since: 1.5
|
||||||
|
##
|
||||||
|
{ 'event': 'GUEST_PANICKED',
|
||||||
|
'data': { 'action': 'GuestPanicAction' } }
|
||||||
|
|
|
@ -3385,4 +3385,16 @@
|
||||||
{ 'enum': 'IoOperationType',
|
{ 'enum': 'IoOperationType',
|
||||||
'data': [ 'read', 'write' ] }
|
'data': [ 'read', 'write' ] }
|
||||||
|
|
||||||
|
##
|
||||||
|
# @GuestPanicAction
|
||||||
|
#
|
||||||
|
# An enumeration of the actions taken when guest OS panic is detected
|
||||||
|
#
|
||||||
|
# @pause: system pauses
|
||||||
|
#
|
||||||
|
# Since: 2.1
|
||||||
|
##
|
||||||
|
{ 'enum': 'GuestPanicAction',
|
||||||
|
'data': [ 'pause' ] }
|
||||||
|
|
||||||
{ 'include': 'qapi-event.json' }
|
{ 'include': 'qapi-event.json' }
|
||||||
|
|
|
@ -39,6 +39,7 @@
|
||||||
#include "monitor/monitor.h"
|
#include "monitor/monitor.h"
|
||||||
#include "exec/gdbstub.h"
|
#include "exec/gdbstub.h"
|
||||||
#include "trace.h"
|
#include "trace.h"
|
||||||
|
#include "qapi-event.h"
|
||||||
|
|
||||||
/* #define DEBUG_KVM */
|
/* #define DEBUG_KVM */
|
||||||
|
|
||||||
|
@ -1029,12 +1030,8 @@ static bool is_special_wait_psw(CPUState *cs)
|
||||||
|
|
||||||
static void guest_panicked(void)
|
static void guest_panicked(void)
|
||||||
{
|
{
|
||||||
QObject *data;
|
qapi_event_send_guest_panicked(GUEST_PANIC_ACTION_PAUSE,
|
||||||
|
&error_abort);
|
||||||
data = qobject_from_jsonf("{ 'action': %s }", "pause");
|
|
||||||
monitor_protocol_event(QEVENT_GUEST_PANICKED, data);
|
|
||||||
qobject_decref(data);
|
|
||||||
|
|
||||||
vm_stop(RUN_STATE_GUEST_PANICKED);
|
vm_stop(RUN_STATE_GUEST_PANICKED);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue