On Tue, 7 Oct 2014 19:59:51 +0800 Zhu Guihua <zhugh.f...@cn.fujitsu.com> wrote:
> On Thu, 2014-10-02 at 10:08 +0000, Igor Mammedov wrote: > > 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. > > > > If I want to delete device without id inside of 'peripheral-anon' > container, the command 'device_del' does not work. > My suggestion is deleting device by the last component name, is this > feasiable? So far device_del was designed to work only with id-ed devices. What's a use-case for unplugging unnamed device from peripheral-anon? > Thanks. > > Zhu > > > Signed-off-by: Igor Mammedov <imamm...@redhat.com> > > --- > > qdev-monitor.c | 13 +++++++++---- > > 1 file 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) > >