In commit 80376c3fc2c38fdd453 in 2010 we added a workaround for some qbus buses not being connected to qdev devices -- if the bus has no parent object then we register a reset function which resets the bus on system reset.
Nearly a decade later, we have now no buses in the tree which are created with non-NULL parents, so we can remove the workaround and instead just assert that if the bus has a NULL parent then it is the main system bus. (The absence of other parentless buses was confirmed by code inspection of all the callsites of qbus_create() and qbus_create_inplace() and cross-checked by 'make check'.) Signed-off-by: Peter Maydell <peter.mayd...@linaro.org> --- While I was reviewing Damian's reset patchset I noticed this code which meant that we theoretically had multiple 'roots' to the set of things being reset, so I wondered what was actually using it. It turns out nothing was :-) Commit 80376c3fc2c38fdd453 also added a TODO in vl.c suggesting that there is the wrong place to register the reset function which effectively resets the whole system starting at the root which is the main system bus: qemu_register_reset(qbus_reset_all_fn, sysbus_get_default()); I don't understand why vl.c is a bad place to put that, and I'd rather not move it to qdev.c (where in qdev.c?) because that would reshuffle reset ordering which seems liable to cause regressions. So maybe we should just delete that TODO comment? --- hw/core/bus.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/hw/core/bus.c b/hw/core/bus.c index e09843f6abe..e50287c2b35 100644 --- a/hw/core/bus.c +++ b/hw/core/bus.c @@ -96,10 +96,9 @@ static void qbus_realize(BusState *bus, DeviceState *parent, const char *name) bus->parent->num_child_bus++; object_property_add_child(OBJECT(bus->parent), bus->name, OBJECT(bus), NULL); object_unref(OBJECT(bus)); - } else if (bus != sysbus_get_default()) { - /* TODO: once all bus devices are qdevified, - only reset handler for main_system_bus should be registered here. */ - qemu_register_reset(qbus_reset_all_fn, bus); + } else { + /* The only bus without a parent is the main system bus */ + assert(bus == sysbus_get_default()); } } -- 2.20.1