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 <da...@gibson.dropbear.id.au>
---
  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

Reply via email to