Commit b6cc36ab authored by Igor Mammedov's avatar Igor Mammedov Committed by Andreas Färber
Browse files

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: default avatarIgor Mammedov <imammedo@redhat.com>
Signed-off-by: default avatarAndreas Färber <afaerber@suse.de>
parent 7716b8ca
Loading
Loading
Loading
Loading
+9 −4
Original line number Diff line number Diff line
@@ -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)