Commit a7ddba52 authored by Igor Mammedov's avatar Igor Mammedov Committed by Andreas Färber
Browse files

qdev: Set device's parent before calling realize() down inheritance chain



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: default avatarIgor Mammedov <imammedo@redhat.com>
Reviewed-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
Signed-off-by: default avatarAndreas Färber <afaerber@suse.de>
parent 3f24a58f
Loading
Loading
Loading
Loading
+4 −4
Original line number Diff line number Diff line
@@ -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,