hw/qdev: Abort rather than ignoring errors adding device properties

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>
Acked-by: Paolo Bonzini <pbonzini@redhat.com>
Message-id: 1364217314-7400-3-git-send-email-peter.maydell@linaro.org
Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
This commit is contained in:
Peter Maydell 2013-03-25 13:15:14 +00:00 committed by Anthony Liguori
parent 54852b0371
commit e769bdc26d

View File

@ -710,6 +710,7 @@ static void device_initfn(Object *obj)
DeviceState *dev = DEVICE(obj); DeviceState *dev = DEVICE(obj);
ObjectClass *class; ObjectClass *class;
Property *prop; Property *prop;
Error *err = NULL;
if (qdev_hotplug) { if (qdev_hotplug) {
dev->hotplugged = 1; dev->hotplugged = 1;
@ -725,15 +726,18 @@ static void device_initfn(Object *obj)
class = object_get_class(OBJECT(dev)); class = object_get_class(OBJECT(dev));
do { do {
for (prop = DEVICE_CLASS(class)->props; prop && prop->name; prop++) { for (prop = DEVICE_CLASS(class)->props; prop && prop->name; prop++) {
qdev_property_add_legacy(dev, prop, NULL); qdev_property_add_legacy(dev, prop, &err);
qdev_property_add_static(dev, prop, NULL); assert_no_error(err);
qdev_property_add_static(dev, prop, &err);
assert_no_error(err);
} }
class = object_class_get_parent(class); class = object_class_get_parent(class);
} while (class != object_class_by_name(TYPE_DEVICE)); } while (class != object_class_by_name(TYPE_DEVICE));
qdev_prop_set_globals(dev); qdev_prop_set_globals(dev);
object_property_add_link(OBJECT(dev), "parent_bus", TYPE_BUS, 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. */ /* Unlink device from bus and free the structure. */