summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorIgor Mammedov <imammedo@redhat.com>2014-10-02 10:08:45 +0000
committerAndreas Färber <afaerber@suse.de>2014-10-15 05:03:15 +0200
commitb6cc36abb20a54a30fbd7d0ae98066df6c5adabc (patch)
tree0b941f306216d0ee7e52ec9c11180112acd54f70
parent7716b8ca7479dec146062c97453dd38e505a5ab4 (diff)
downloadhqemu-b6cc36abb20a54a30fbd7d0ae98066df6c5adabc.zip
hqemu-b6cc36abb20a54a30fbd7d0ae98066df6c5adabc.tar.gz
qdev: device_del: Search for to be unplugged device in 'peripheral' container
device_add puts every device with 'id' inside of 'peripheral' container using id's value as the last component name. Use it by replacing recursive search on sysbus with path lookup in 'peripheral' container, which could handle both BUS and BUS-less device cases. Signed-off-by: Igor Mammedov <imammedo@redhat.com> Signed-off-by: Andreas Färber <afaerber@suse.de>
-rw-r--r--qdev-monitor.c13
1 files changed, 9 insertions, 4 deletions
diff --git a/qdev-monitor.c b/qdev-monitor.c
index c721451..754437b 100644
--- a/qdev-monitor.c
+++ b/qdev-monitor.c
@@ -686,15 +686,20 @@ int do_device_add(Monitor *mon, const QDict *qdict, QObject **ret_data)
void qmp_device_del(const char *id, Error **errp)
{
- DeviceState *dev;
+ Object *obj;
+ char *root_path = object_get_canonical_path(qdev_get_peripheral());
+ char *path = g_strdup_printf("%s/%s", root_path, id);
- dev = qdev_find_recursive(sysbus_get_default(), id);
- if (!dev) {
+ g_free(root_path);
+ obj = object_resolve_path_type(path, TYPE_DEVICE, NULL);
+ g_free(path);
+
+ if (!obj) {
error_set(errp, QERR_DEVICE_NOT_FOUND, id);
return;
}
- qdev_unplug(dev, errp);
+ qdev_unplug(DEVICE(obj), errp);
}
void qdev_machine_init(void)
OpenPOWER on IntegriCloud