mirror of https://github.com/proxmox/mirror_qemu
qapi event: convert DEVICE_DELETED
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>master
parent
99eaf09c73
commit
24b699fb2b
|
@ -168,24 +168,6 @@ Example:
|
||||||
Note: The "ready to complete" status is always reset by a BLOCK_JOB_ERROR
|
Note: The "ready to complete" status is always reset by a BLOCK_JOB_ERROR
|
||||||
event.
|
event.
|
||||||
|
|
||||||
DEVICE_DELETED
|
|
||||||
--------------
|
|
||||||
|
|
||||||
Emitted whenever the device removal completion is acknowledged
|
|
||||||
by the guest.
|
|
||||||
At this point, it's safe to reuse the specified device ID.
|
|
||||||
Device removal can be initiated by the guest or by HMP/QMP commands.
|
|
||||||
|
|
||||||
Data:
|
|
||||||
|
|
||||||
- "device": device name (json-string, optional)
|
|
||||||
- "path": device path (json-string)
|
|
||||||
|
|
||||||
{ "event": "DEVICE_DELETED",
|
|
||||||
"data": { "device": "virtio-net-pci-0",
|
|
||||||
"path": "/machine/peripheral/virtio-net-pci-0" },
|
|
||||||
"timestamp": { "seconds": 1265044230, "microseconds": 450486 } }
|
|
||||||
|
|
||||||
DEVICE_TRAY_MOVED
|
DEVICE_TRAY_MOVED
|
||||||
-----------------
|
-----------------
|
||||||
|
|
||||||
|
|
|
@ -32,9 +32,9 @@
|
||||||
#include "qapi/qmp/qerror.h"
|
#include "qapi/qmp/qerror.h"
|
||||||
#include "qapi/visitor.h"
|
#include "qapi/visitor.h"
|
||||||
#include "qapi/qmp/qjson.h"
|
#include "qapi/qmp/qjson.h"
|
||||||
#include "monitor/monitor.h"
|
|
||||||
#include "hw/hotplug.h"
|
#include "hw/hotplug.h"
|
||||||
#include "hw/boards.h"
|
#include "hw/boards.h"
|
||||||
|
#include "qapi-event.h"
|
||||||
|
|
||||||
int qdev_hotplug = 0;
|
int qdev_hotplug = 0;
|
||||||
static bool qdev_hot_added = false;
|
static bool qdev_hot_added = false;
|
||||||
|
@ -972,7 +972,6 @@ static void device_unparent(Object *obj)
|
||||||
{
|
{
|
||||||
DeviceState *dev = DEVICE(obj);
|
DeviceState *dev = DEVICE(obj);
|
||||||
BusState *bus;
|
BusState *bus;
|
||||||
QObject *event_data;
|
|
||||||
bool have_realized = dev->realized;
|
bool have_realized = dev->realized;
|
||||||
|
|
||||||
if (dev->realized) {
|
if (dev->realized) {
|
||||||
|
@ -992,14 +991,7 @@ static void device_unparent(Object *obj)
|
||||||
if (have_realized) {
|
if (have_realized) {
|
||||||
gchar *path = object_get_canonical_path(OBJECT(dev));
|
gchar *path = object_get_canonical_path(OBJECT(dev));
|
||||||
|
|
||||||
if (dev->id) {
|
qapi_event_send_device_deleted(!!dev->id, dev->id, path, &error_abort);
|
||||||
event_data = qobject_from_jsonf("{ 'device': %s, 'path': %s }",
|
|
||||||
dev->id, path);
|
|
||||||
} else {
|
|
||||||
event_data = qobject_from_jsonf("{ 'path': %s }", path);
|
|
||||||
}
|
|
||||||
monitor_protocol_event(QEVENT_DEVICE_DELETED, event_data);
|
|
||||||
qobject_decref(event_data);
|
|
||||||
g_free(path);
|
g_free(path);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -106,3 +106,19 @@
|
||||||
##
|
##
|
||||||
{ 'event': 'WATCHDOG',
|
{ 'event': 'WATCHDOG',
|
||||||
'data': { 'action': 'WatchdogExpirationAction' } }
|
'data': { 'action': 'WatchdogExpirationAction' } }
|
||||||
|
|
||||||
|
##
|
||||||
|
# @DEVICE_DELETED
|
||||||
|
#
|
||||||
|
# Emitted whenever the device removal completion is acknowledged by the guest.
|
||||||
|
# At this point, it's safe to reuse the specified device ID. Device removal can
|
||||||
|
# be initiated by the guest or by HMP/QMP commands.
|
||||||
|
#
|
||||||
|
# @device: #optional, device name
|
||||||
|
#
|
||||||
|
# @path: device path
|
||||||
|
#
|
||||||
|
# Since: 1.5
|
||||||
|
##
|
||||||
|
{ 'event': 'DEVICE_DELETED',
|
||||||
|
'data': { '*device': 'str', 'path': 'str' } }
|
||||||
|
|
Loading…
Reference in New Issue