From: Thomas Huth <[email protected]> We still have a lot of devices that end up in /machine/unattached in case the caller forgot to use object_property_add_child() to add it to a proper location in the QOM tree. But at least for the devices that get realized via qdev_realize() and that have a bus specified, we can do better: Add the device automatically as a child to the bus device instead! This way the QOM tree looks way more logical, with way less devices hanging around in the /machine/unattached space.
While we're at it, use the type name as node name (instead of using "device" like we did in the "unattached" space). But since these entries might not be stable (they use a counting number in the square brackets), the code also uses a "x-" prefix here to indicate that this still might change in the course of time (once a board decides to manually attach the device with a proper name instead). Signed-off-by: Thomas Huth <[email protected]> --- hw/core/qdev.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/hw/core/qdev.c b/hw/core/qdev.c index 42641c5224e..5b773d0108a 100644 --- a/hw/core/qdev.c +++ b/hw/core/qdev.c @@ -266,9 +266,19 @@ bool qdev_realize(DeviceState *dev, BusState *bus, Error **errp) assert(!dev->realized && !dev->parent_bus); if (bus) { + Object *obj = OBJECT(dev); + if (!qdev_set_parent_bus(dev, bus, errp)) { return false; } + + if (!obj->parent) { + static int count; + g_autofree char *name = g_strdup_printf("x-%s[%d]", + object_get_typename(obj), + count++); + object_property_add_child(OBJECT(bus), name, obj); + } } else { assert(!DEVICE_GET_CLASS(dev)->bus_type); } -- 2.53.0
