From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:59238) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1aHKY8-0006Fn-7r for qemu-devel@nongnu.org; Thu, 07 Jan 2016 19:05:01 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1aHKY7-0004NA-0I for qemu-devel@nongnu.org; Thu, 07 Jan 2016 19:05:00 -0500 MIME-Version: 1.0 Sender: alistair23@gmail.com In-Reply-To: References: <72794c95e3ccdadd4db71fe83d9c1855a91148ae.1450570397.git.crosthwaite.peter@gmail.com> From: Alistair Francis Date: Thu, 7 Jan 2016 16:04:28 -0800 Message-ID: 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: Peter Crosthwaite Cc: Peter Maydell , Peter Crosthwaite , "qemu-devel@nongnu.org Developers" , Alistair Francis , qemu-arm , Paolo Bonzini On Wed, Jan 6, 2016 at 4:25 PM, Peter Crosthwaite wrote: > 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. I just re-read what I said and it doesn't really make sense. My only concern was busses with the same name somehow having conflicts that weren't previously there. I can't think of any case where this would happen though. Acked-by: Alistair Francis Thanks, Alistair > > 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 >>> >>> >