qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* [Qemu-devel] [PATCH v5 0/2] qdev: Detect duplicate device properties
@ 2012-10-26 17:29 Peter Maydell
  2012-10-26 17:29 ` [Qemu-devel] [PATCH v5 1/2] qom: Detect attempts to add a property that already exists Peter Maydell
  2012-10-26 17:29 ` [Qemu-devel] [PATCH v5 2/2] hw/qdev: Abort rather than ignoring errors adding device properties Peter Maydell
  0 siblings, 2 replies; 3+ messages in thread
From: Peter Maydell @ 2012-10-26 17:29 UTC (permalink / raw)
  To: qemu-devel; +Cc: Paolo Bonzini, Anthony Liguori, patches

Detect and abort on duplicate properties in a qdev Property array.

The only change v4->v5 is I fixed the commit message in the
first patch not to talk about "critical errors" any more,
and added Anthony's reviewed-by tags.


Peter Maydell (2):
  qom: Detect attempts to add a property that already exists
  hw/qdev: Abort rather than ignoring errors adding device properties

 hw/qdev.c    |   10 +++++++---
 qom/object.c |   13 ++++++++++++-
 2 files changed, 19 insertions(+), 4 deletions(-)

-- 
1.7.9.5

^ permalink raw reply	[flat|nested] 3+ messages in thread

* [Qemu-devel] [PATCH v5 1/2] qom: Detect attempts to add a property that already exists
  2012-10-26 17:29 [Qemu-devel] [PATCH v5 0/2] qdev: Detect duplicate device properties Peter Maydell
@ 2012-10-26 17:29 ` Peter Maydell
  2012-10-26 17:29 ` [Qemu-devel] [PATCH v5 2/2] hw/qdev: Abort rather than ignoring errors adding device properties Peter Maydell
  1 sibling, 0 replies; 3+ messages in thread
From: Peter Maydell @ 2012-10-26 17:29 UTC (permalink / raw)
  To: qemu-devel; +Cc: Paolo Bonzini, Anthony Liguori, patches

Detect attempts to add a property to an object if one of
that name already exists, and report them as errors.

Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Reviewed-by: Anthony Liguori <aliguori@us.ibm.com>
---
 qom/object.c |   13 ++++++++++++-
 1 file changed, 12 insertions(+), 1 deletion(-)

diff --git a/qom/object.c b/qom/object.c
index e3e9242..a9dfc8c 100644
--- a/qom/object.c
+++ b/qom/object.c
@@ -620,7 +620,18 @@ void object_property_add(Object *obj, const char *name, const char *type,
                          ObjectPropertyRelease *release,
                          void *opaque, Error **errp)
 {
-    ObjectProperty *prop = g_malloc0(sizeof(*prop));
+    ObjectProperty *prop;
+
+    QTAILQ_FOREACH(prop, &obj->properties, node) {
+        if (strcmp(prop->name, name) == 0) {
+            error_setg(errp, "attempt to add duplicate property '%s'"
+                       " to object (type '%s')\n", name,
+                       object_get_typename(obj));
+            return;
+        }
+    }
+
+    prop = g_malloc0(sizeof(*prop));
 
     prop->name = g_strdup(name);
     prop->type = g_strdup(type);
-- 
1.7.9.5

^ permalink raw reply related	[flat|nested] 3+ messages in thread

* [Qemu-devel] [PATCH v5 2/2] hw/qdev: Abort rather than ignoring errors adding device properties
  2012-10-26 17:29 [Qemu-devel] [PATCH v5 0/2] qdev: Detect duplicate device properties Peter Maydell
  2012-10-26 17:29 ` [Qemu-devel] [PATCH v5 1/2] qom: Detect attempts to add a property that already exists Peter Maydell
@ 2012-10-26 17:29 ` Peter Maydell
  1 sibling, 0 replies; 3+ messages in thread
From: Peter Maydell @ 2012-10-26 17:29 UTC (permalink / raw)
  To: qemu-devel; +Cc: Paolo Bonzini, Anthony Liguori, patches

Instead of ignoring any errors that occur when adding properties
to a new device in device_initfn(), check for them and abort if any
occur. The most likely cause is accidentally adding a duplicate
property, which is a programming error by the device author.

Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Reviewed-by: Anthony Liguori <aliguori@us.ibm.com>
---
 hw/qdev.c |   10 +++++++---
 1 file changed, 7 insertions(+), 3 deletions(-)

diff --git a/hw/qdev.c b/hw/qdev.c
index 9b9aba3..b34d80a 100644
--- a/hw/qdev.c
+++ b/hw/qdev.c
@@ -659,6 +659,7 @@ static void device_initfn(Object *obj)
     DeviceState *dev = DEVICE(obj);
     ObjectClass *class;
     Property *prop;
+    Error *err = NULL;
 
     if (qdev_hotplug) {
         dev->hotplugged = 1;
@@ -671,15 +672,18 @@ static void device_initfn(Object *obj)
     class = object_get_class(OBJECT(dev));
     do {
         for (prop = DEVICE_CLASS(class)->props; prop && prop->name; prop++) {
-            qdev_property_add_legacy(dev, prop, NULL);
-            qdev_property_add_static(dev, prop, NULL);
+            qdev_property_add_legacy(dev, prop, &err);
+            assert_no_error(err);
+            qdev_property_add_static(dev, prop, &err);
+            assert_no_error(err);
         }
         class = object_class_get_parent(class);
     } while (class != object_class_by_name(TYPE_DEVICE));
     qdev_prop_set_globals(dev);
 
     object_property_add_link(OBJECT(dev), "parent_bus", TYPE_BUS,
-                             (Object **)&dev->parent_bus, NULL);
+                             (Object **)&dev->parent_bus, &err);
+    assert_no_error(err);
 }
 
 /* Unlink device from bus and free the structure.  */
-- 
1.7.9.5

^ permalink raw reply related	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2012-10-26 17:54 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-10-26 17:29 [Qemu-devel] [PATCH v5 0/2] qdev: Detect duplicate device properties Peter Maydell
2012-10-26 17:29 ` [Qemu-devel] [PATCH v5 1/2] qom: Detect attempts to add a property that already exists Peter Maydell
2012-10-26 17:29 ` [Qemu-devel] [PATCH v5 2/2] hw/qdev: Abort rather than ignoring errors adding device properties Peter Maydell

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).