From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:58845) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1aGyO8-0004NI-Tw for qemu-devel@nongnu.org; Wed, 06 Jan 2016 19:25:14 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1aGyO7-0000BV-Rz for qemu-devel@nongnu.org; Wed, 06 Jan 2016 19:25:12 -0500 MIME-Version: 1.0 In-Reply-To: References: <72794c95e3ccdadd4db71fe83d9c1855a91148ae.1450570397.git.crosthwaite.peter@gmail.com> Date: Wed, 6 Jan 2016 16:25:10 -0800 Message-ID: From: Peter Crosthwaite Content-Type: text/plain; charset=UTF-8 Subject: Re: [Qemu-devel] [PATCH v6 1/6] qdev: get_child_bus(): Use QOM lookup if available List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Alistair Francis Cc: Peter Maydell , qemu-arm , "qemu-devel@nongnu.org Developers" , Paolo Bonzini , Peter Crosthwaite On Wed, Jan 6, 2016 at 4:18 PM, Alistair Francis wrote: > On Sat, Dec 19, 2015 at 9:43 PM, Peter Crosthwaite > wrote: >> qbus_realize() adds busses as a QOM child of the device in addition to >> adding it to the qdev bus list. Change get_child_bus() to use the QOM >> child if it is available. This takes priority over the bus-list, but >> the child object is checked for type correctness. > > This doesn't cause problems for anything else? Is there anything else > with the same name or something where this causes conflicts? > Not that I know of, I'm just being defensive as it is core code. I suspect that that ignored failure path on the child setter is incorrect but I can't prove it beyond all doubt. Regards, Peter > Thanks, > > Alistair > >> >> This prepares support for aliasing of buses. The use case is SoCs, >> where a SoC container needs to present buses to the board level, but >> the buses are implemented by controller IP we already model as self >> contained qbus-containing devices. >> >> Signed-off-by: Peter Crosthwaite >> --- >> Currently qbus_realize() ignores errors from object_property_add_child, >> so it is hard to guarantee that the QOM linkage is reliable. If it were >> the case that that object_property_add_child was supposed to be error >> asserting, we could remove the old bus-list strcmp iterator altogether. >> >> hw/core/qdev.c | 6 ++++++ >> 1 file changed, 6 insertions(+) >> >> diff --git a/hw/core/qdev.c b/hw/core/qdev.c >> index b3ad467..c96c464 100644 >> --- a/hw/core/qdev.c >> +++ b/hw/core/qdev.c >> @@ -581,6 +581,12 @@ void qdev_pass_gpios(DeviceState *dev, DeviceState *container, >> BusState *qdev_get_child_bus(DeviceState *dev, const char *name) >> { >> BusState *bus; >> + Object *child = object_resolve_path_component(OBJECT(dev), name); >> + >> + bus = (BusState *)object_dynamic_cast(child, TYPE_BUS); >> + if (bus) { >> + return bus; >> + } >> >> QLIST_FOREACH(bus, &dev->child_bus, sibling) { >> if (strcmp(name, bus->name) == 0) { >> -- >> 1.9.1 >> >>