From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([208.118.235.92]:38250) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1URu3Y-0006mn-OC for qemu-devel@nongnu.org; Mon, 15 Apr 2013 20:47:34 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1URu3X-0006gV-2K for qemu-devel@nongnu.org; Mon, 15 Apr 2013 20:47:32 -0400 Received: from cantor2.suse.de ([195.135.220.15]:55497 helo=mx2.suse.de) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1URu3W-0006gB-HG for qemu-devel@nongnu.org; Mon, 15 Apr 2013 20:47:30 -0400 From: =?UTF-8?q?Andreas=20F=C3=A4rber?= Date: Tue, 16 Apr 2013 02:46:48 +0200 Message-Id: <1366073209-27119-12-git-send-email-afaerber@suse.de> In-Reply-To: <1366073209-27119-1-git-send-email-afaerber@suse.de> References: <1366073209-27119-1-git-send-email-afaerber@suse.de> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Subject: [Qemu-devel] [PATCH 11/12] qdev: Set device's parent before calling realize() down inheritance chain List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: Igor Mammedov , =?UTF-8?q?Andreas=20F=C3=A4rber?= From: Igor Mammedov Currently device_set_realized() sets parent only after device was realize= d, 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 Reviewed-by: Paolo Bonzini Signed-off-by: Andreas F=C3=A4rber --- hw/core/qdev.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/hw/core/qdev.c b/hw/core/qdev.c index bab4ed7..4eb0134 100644 --- a/hw/core/qdev.c +++ b/hw/core/qdev.c @@ -684,10 +684,6 @@ static void device_set_realized(Object *obj, bool va= lue, Error **err) Error *local_err =3D NULL; =20 if (value && !dev->realized) { - if (dc->realize) { - dc->realize(dev, &local_err); - } - if (!obj->parent && local_err =3D=3D NULL) { static int unattached_count; gchar *name =3D g_strdup_printf("device[%d]", unattached_cou= nt++); @@ -698,6 +694,10 @@ static void device_set_realized(Object *obj, bool va= lue, Error **err) g_free(name); } =20 + if (dc->realize) { + dc->realize(dev, &local_err); + } + if (qdev_get_vmsd(dev) && local_err =3D=3D NULL) { vmstate_register_with_alias_id(dev, -1, qdev_get_vmsd(dev), = dev, dev->instance_id_alias, --=20 1.8.1.4