All of lore.kernel.org
 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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.