diff options
| author | Peter Maydell <peter.maydell@linaro.org> | 2015-09-22 16:51:36 +0100 |
|---|---|---|
| committer | Peter Maydell <peter.maydell@linaro.org> | 2015-09-22 16:51:37 +0100 |
| commit | 482d7c0854423608e20e56b5824b7340bd3af7df (patch) | |
| tree | c035d32bede1323bd40a53aaa39dd4528904f89d /qdev-monitor.c | |
| parent | 6138fbdebd72f6822367e88d14ddc635b5a5ddfb (diff) | |
| parent | abadcbc838a3b256819fd8932c34a4af41ec187f (diff) | |
| download | focaccia-qemu-482d7c0854423608e20e56b5824b7340bd3af7df.tar.gz focaccia-qemu-482d7c0854423608e20e56b5824b7340bd3af7df.zip | |
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>
Diffstat (limited to 'qdev-monitor.c')
| -rw-r--r-- | qdev-monitor.c | 20 |
1 files changed, 15 insertions, 5 deletions
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); } |