From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:60089) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ZbP2D-0000oE-KC for qemu-devel@nongnu.org; Mon, 14 Sep 2015 04:22:46 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1ZbP2A-0003oe-FY for qemu-devel@nongnu.org; Mon, 14 Sep 2015 04:22:45 -0400 Received: from mail-pa0-f42.google.com ([209.85.220.42]:36746) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ZbP2A-0003oQ-AO for qemu-devel@nongnu.org; Mon, 14 Sep 2015 04:22:42 -0400 Received: by padhk3 with SMTP id hk3so137470860pad.3 for ; Mon, 14 Sep 2015 01:22:41 -0700 (PDT) References: <1442194913-26545-1-git-send-email-david@gibson.dropbear.id.au> <1442194913-26545-2-git-send-email-david@gibson.dropbear.id.au> From: Alexey Kardashevskiy Message-ID: <55F683CB.6000508@ozlabs.ru> Date: Mon, 14 Sep 2015 18:22:35 +1000 MIME-Version: 1.0 In-Reply-To: <1442194913-26545-2-git-send-email-david@gibson.dropbear.id.au> Content-Type: text/plain; charset=koi8-r; format=flowed Content-Transfer-Encoding: 7bit Subject: Re: [Qemu-devel] [RFCv2 1/2] spapr: Remove unnecessary owner field from sPAPRDRConnector List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: David Gibson , mdroth@linux.vnet.ibm.com, bharata@linux.vnet.ibm.com Cc: pbonzini@redhat.com, qemu-ppc@nongnu.org, agraf@suse.de, qemu-devel@nongnu.org On 09/14/2015 11:41 AM, David Gibson wrote: > The sPAPRDRConnector pseudo-device contains an owner field which is > set in spapr_dr_connector_new(). However, that function also calls > object_property_add_child() to set the DRConnector as the QOM child of > the owner object. That means that owner is always the same as the QOM > parent, and so redundant. > > Signed-off-by: David Gibson > --- > hw/ppc/spapr_drc.c | 5 ++--- > include/hw/ppc/spapr_drc.h | 1 - > 2 files changed, 2 insertions(+), 4 deletions(-) > > diff --git a/hw/ppc/spapr_drc.c b/hw/ppc/spapr_drc.c > index 9ce844a..68e0c3e 100644 > --- a/hw/ppc/spapr_drc.c > +++ b/hw/ppc/spapr_drc.c > @@ -416,7 +416,7 @@ static void realize(DeviceState *d, Error **errp) > child_name = object_get_canonical_path_component(OBJECT(drc)); > DPRINTFN("drc child name: %s", child_name); > object_property_add_alias(root_container, link_name, > - drc->owner, child_name, &err); > + OBJECT(drc)->parent, child_name, &err); > if (err) { > error_report("%s", error_get_pretty(err)); > error_free(err); > @@ -456,7 +456,6 @@ sPAPRDRConnector *spapr_dr_connector_new(Object *owner, > > drc->type = type; > drc->id = id; > - drc->owner = owner; > object_property_add_child(owner, "dr-connector[*]", OBJECT(drc), NULL); The comment for object_property_add_child() in include/qom/object.h says: === * There is no way for a child to determine what its parent is. It is not * a bidirectional relationship. This is by design. === This part always confused me as there is "Object *parent" in the "struct Object". So there is way to determine but it must not be used? Is it debug only? Anyway, all members of the Object class are under /*< private >*/ so they should not be accesses in sPAPR code, I believe. > object_property_set_bool(OBJECT(drc), true, "realized", NULL); > > @@ -669,7 +668,7 @@ int spapr_drc_populate_dt(void *fdt, int fdt_offset, Object *owner, > drc = SPAPR_DR_CONNECTOR(obj); > drck = SPAPR_DR_CONNECTOR_GET_CLASS(drc); > > - if (owner && (drc->owner != owner)) { > + if (owner && (OBJECT(drc)->parent != owner)) { > continue; > } > > diff --git a/include/hw/ppc/spapr_drc.h b/include/hw/ppc/spapr_drc.h > index 28ffeae..16e2d4b 100644 > --- a/include/hw/ppc/spapr_drc.h > +++ b/include/hw/ppc/spapr_drc.h > @@ -137,7 +137,6 @@ typedef struct sPAPRDRConnector { > > sPAPRDRConnectorType type; > uint32_t id; > - Object *owner; > const char *name; > > /* sensor/indicator states */ > -- Alexey