Skip to content

Commit

Permalink
qdev: device_del: Search for to be unplugged device in 'peripheral' c…
Browse files Browse the repository at this point in the history
…ontainer

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>
  • Loading branch information
Igor Mammedov authored and afaerber committed Oct 15, 2014
1 parent 7716b8c commit b6cc36a
Showing 1 changed file with 9 additions and 4 deletions.
13 changes: 9 additions & 4 deletions qdev-monitor.c
Expand Up @@ -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)
Expand Down

0 comments on commit b6cc36a

Please sign in to comment.