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:
Wenchao Xia 2014-06-18 08:43:52 +02:00 committed by Luiz Capitulino
parent aef9d3115f
commit 3a44969037
5 changed files with 29 additions and 31 deletions

View file

@ -1,20 +1,6 @@
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
--------------

View file

@ -14,12 +14,12 @@
#include "qapi/qmp/qobject.h"
#include "qapi/qmp/qjson.h"
#include "monitor/monitor.h"
#include "sysemu/sysemu.h"
#include "qemu/log.h"
#include "hw/nvram/fw_cfg.h"
#include "hw/i386/pc.h"
#include "qapi-event.h"
/* The bit of supported pv event */
#define PVPANIC_F_PANICKED 0
@ -31,15 +31,6 @@
#define ISA_PVPANIC_DEVICE(obj) \
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 bool logged;
@ -50,7 +41,7 @@ static void handle_event(int event)
}
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);
return;
}

View file

@ -266,3 +266,15 @@
##
{ 'event': 'BALLOON_CHANGE',
'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' } }

View file

@ -3385,4 +3385,16 @@
{ 'enum': 'IoOperationType',
'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' }

View file

@ -39,6 +39,7 @@
#include "monitor/monitor.h"
#include "exec/gdbstub.h"
#include "trace.h"
#include "qapi-event.h"
/* #define DEBUG_KVM */
@ -1029,12 +1030,8 @@ static bool is_special_wait_psw(CPUState *cs)
static void guest_panicked(void)
{
QObject *data;
data = qobject_from_jsonf("{ 'action': %s }", "pause");
monitor_protocol_event(QEVENT_GUEST_PANICKED, data);
qobject_decref(data);
qapi_event_send_guest_panicked(GUEST_PANIC_ACTION_PAUSE,
&error_abort);
vm_stop(RUN_STATE_GUEST_PANICKED);
}