提交 b6cc36ab 编写于 作者: I Igor Mammedov 提交者: Andreas Färber

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: NIgor Mammedov <imammedo@redhat.com>
Signed-off-by: NAndreas Färber <afaerber@suse.de>
上级 7716b8ca
......@@ -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)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册