summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Maydell <peter.maydell@linaro.org>2015-09-22 16:51:36 +0100
committerPeter Maydell <peter.maydell@linaro.org>2015-09-22 16:51:37 +0100
commit482d7c0854423608e20e56b5824b7340bd3af7df (patch)
treec035d32bede1323bd40a53aaa39dd4528904f89d
parent6138fbdebd72f6822367e88d14ddc635b5a5ddfb (diff)
parentabadcbc838a3b256819fd8932c34a4af41ec187f (diff)
downloadqemu-482d7c0854423608e20e56b5824b7340bd3af7df.tar.gz
Merge remote-tracking branch 'remotes/armbru/tags/pull-monitor-2015-09-22' into staging
Monitor patches # gpg: Signature made Tue 22 Sep 2015 10:33:34 BST using RSA key ID EB918653 # gpg: Good signature from "Markus Armbruster <armbru@redhat.com>" # gpg: aka "Markus Armbruster <armbru@pond.sub.org>" * remotes/armbru/tags/pull-monitor-2015-09-22: hmp: Restore "info pci" monitor: allow device_del to accept QOM paths Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
-rw-r--r--hmp-commands-info.hx14
-rw-r--r--hmp-commands.hx3
-rw-r--r--qapi-schema.json2
-rw-r--r--qdev-monitor.c20
-rw-r--r--qmp-commands.hx7
5 files changed, 38 insertions, 8 deletions
diff --git a/hmp-commands-info.hx b/hmp-commands-info.hx
index 9f5a15826c..94a2afefd5 100644
--- a/hmp-commands-info.hx
+++ b/hmp-commands-info.hx
@@ -183,6 +183,20 @@ STEXI
Show i8259 (PIC) state.
ETEXI
+ {
+ .name = "pci",
+ .args_type = "",
+ .params = "",
+ .help = "show PCI info",
+ .mhandler.cmd = hmp_info_pci,
+ },
+
+STEXI
+@item info pci
+@findex pci
+Show PCI information.
+ETEXI
+
#if defined(TARGET_I386) || defined(TARGET_SH4) || defined(TARGET_SPARC) || \
defined(TARGET_PPC) || defined(TARGET_XTENSA)
{
diff --git a/hmp-commands.hx b/hmp-commands.hx
index a511004434..3a4ae3950a 100644
--- a/hmp-commands.hx
+++ b/hmp-commands.hx
@@ -676,7 +676,8 @@ ETEXI
STEXI
@item device_del @var{id}
@findex device_del
-Remove device @var{id}.
+Remove device @var{id}. @var{id} may be a short ID
+or a QOM object path.
ETEXI
{
diff --git a/qapi-schema.json b/qapi-schema.json
index 821362d637..527690dfe0 100644
--- a/qapi-schema.json
+++ b/qapi-schema.json
@@ -1951,7 +1951,7 @@
#
# Remove a device from a guest
#
-# @id: the name of the device
+# @id: the name or QOM path of the device
#
# Returns: Nothing on success
# If @id is not a valid device, DeviceNotFound
diff --git a/qdev-monitor.c b/qdev-monitor.c
index 0bf7f83a1d..eb7aef2c81 100644
--- a/qdev-monitor.c
+++ b/qdev-monitor.c
@@ -771,12 +771,17 @@ void qmp_device_add(QDict *qdict, QObject **ret_data, Error **errp)
void qmp_device_del(const char *id, Error **errp)
{
Object *obj;
- char *root_path = object_get_canonical_path(qdev_get_peripheral());
- char *path = g_strdup_printf("%s/%s", root_path, id);
- g_free(root_path);
- obj = object_resolve_path_type(path, TYPE_DEVICE, NULL);
- g_free(path);
+ if (id[0] == '/') {
+ obj = object_resolve_path(id, NULL);
+ } else {
+ char *root_path = object_get_canonical_path(qdev_get_peripheral());
+ char *path = g_strdup_printf("%s/%s", root_path, id);
+
+ g_free(root_path);
+ obj = object_resolve_path_type(path, TYPE_DEVICE, NULL);
+ g_free(path);
+ }
if (!obj) {
error_set(errp, ERROR_CLASS_DEVICE_NOT_FOUND,
@@ -784,6 +789,11 @@ void qmp_device_del(const char *id, Error **errp)
return;
}
+ if (!object_dynamic_cast(obj, TYPE_DEVICE)) {
+ error_setg(errp, "%s is not a hotpluggable device", id);
+ return;
+ }
+
qdev_unplug(DEVICE(obj), errp);
}
diff --git a/qmp-commands.hx b/qmp-commands.hx
index 66f03007ec..d2ba800d5e 100644
--- a/qmp-commands.hx
+++ b/qmp-commands.hx
@@ -321,13 +321,18 @@ Remove a device.
Arguments:
-- "id": the device's ID (json-string)
+- "id": the device's ID or QOM path (json-string)
Example:
-> { "execute": "device_del", "arguments": { "id": "net1" } }
<- { "return": {} }
+Example:
+
+-> { "execute": "device_del", "arguments": { "id": "/machine/peripheral-anon/device[0]" } }
+<- { "return": {} }
+
EQMP
{