[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH v2] hw/core/bus.c: Only the main system bus can
From: |
Damien Hedde |
Subject: |
Re: [Qemu-devel] [PATCH v2] hw/core/bus.c: Only the main system bus can have no parent |
Date: |
Fri, 24 May 2019 17:55:38 +0200 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Thunderbird/60.6.1 |
On 5/23/19 5:05 PM, Peter Maydell wrote:
> 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 (and unregister it when the
> bus is unparented).
>
> 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 <address@hidden>
> Reviewed-by: Markus Armbruster <address@hidden>
> ---
> v1->v2: clean up also the bus_unparent() code
> ---
> hw/core/bus.c | 21 +++++++++------------
> 1 file changed, 9 insertions(+), 12 deletions(-)
>
> diff --git a/hw/core/bus.c b/hw/core/bus.c
> index e09843f6abe..b8839c7268d 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());
> }
> }
>
> @@ -108,18 +107,16 @@ static void bus_unparent(Object *obj)
> BusState *bus = BUS(obj);
> BusChild *kid;
>
> + /* Only the main system bus has no parent, and that bus is never freed */
> + assert(bus->parent);
> +
> while ((kid = QTAILQ_FIRST(&bus->children)) != NULL) {
> DeviceState *dev = kid->child;
> object_unparent(OBJECT(dev));
> }
> - if (bus->parent) {
> - QLIST_REMOVE(bus, sibling);
> - bus->parent->num_child_bus--;
> - bus->parent = NULL;
> - } else {
> - assert(bus != sysbus_get_default()); /* main_system_bus is never
> freed */
> - qemu_unregister_reset(qbus_reset_all_fn, bus);
> - }
> + QLIST_REMOVE(bus, sibling);
> + bus->parent->num_child_bus--;
> + bus->parent = NULL;
> }
>
> void qbus_create_inplace(void *bus, size_t size, const char *typename,
>
Reviewed-by: Damien Hedde <address@hidden>