]> rtime.felk.cvut.cz Git - lisovros/qemu_apohw.git/commitdiff
qdev: Set device's parent before calling realize() down inheritance chain
authorIgor Mammedov <imammedo@redhat.com>
Thu, 11 Apr 2013 14:51:56 +0000 (16:51 +0200)
committerAndreas Färber <afaerber@suse.de>
Mon, 15 Apr 2013 23:19:46 +0000 (01:19 +0200)
Currently device_set_realized() sets parent only after device was realized,
but qdev_device_add() sets it before device is realized.
Make behavior consistent and alter device_set_realized() to behave like
qdev_device_add().

It will allow to set link<> properties in realize() method in classes
inherited from DEVICE.

Signed-off-by: Igor Mammedov <imammedo@redhat.com>
Reviewed-by: Paolo Bonzini <pbonzini@redhat.com>
Signed-off-by: Andreas Färber <afaerber@suse.de>
hw/core/qdev.c

index bab4ed7bf759c96957e80530ec02a70c2da5e5a2..4eb01345dfe8c9d53f0f5888475b85ef91616dfd 100644 (file)
@@ -684,10 +684,6 @@ static void device_set_realized(Object *obj, bool value, Error **err)
     Error *local_err = NULL;
 
     if (value && !dev->realized) {
-        if (dc->realize) {
-            dc->realize(dev, &local_err);
-        }
-
         if (!obj->parent && local_err == NULL) {
             static int unattached_count;
             gchar *name = g_strdup_printf("device[%d]", unattached_count++);
@@ -698,6 +694,10 @@ static void device_set_realized(Object *obj, bool value, Error **err)
             g_free(name);
         }
 
+        if (dc->realize) {
+            dc->realize(dev, &local_err);
+        }
+
         if (qdev_get_vmsd(dev) && local_err == NULL) {
             vmstate_register_with_alias_id(dev, -1, qdev_get_vmsd(dev), dev,
                                            dev->instance_id_alias,