From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([208.118.235.92]:59104) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1TsgE7-0008LK-Hw for qemu-devel@nongnu.org; Tue, 08 Jan 2013 15:56:54 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1TsgE5-00056u-VS for qemu-devel@nongnu.org; Tue, 08 Jan 2013 15:56:51 -0500 Received: from cantor2.suse.de ([195.135.220.15]:45623 helo=mx2.suse.de) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1TsgE5-00056d-HQ for qemu-devel@nongnu.org; Tue, 08 Jan 2013 15:56:49 -0500 Received: from relay1.suse.de (unknown [195.135.220.254]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mx2.suse.de (Postfix) with ESMTP id 00586A51BB for ; Tue, 8 Jan 2013 21:56:48 +0100 (CET) From: =?UTF-8?q?Andreas=20F=C3=A4rber?= Date: Tue, 8 Jan 2013 21:56:22 +0100 Message-Id: <1357678594-427-6-git-send-email-afaerber@suse.de> In-Reply-To: <1357678594-427-1-git-send-email-afaerber@suse.de> References: <1357678594-427-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 05/17] qdev: Don't assume existence of parent bus on unparenting List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: =?UTF-8?q?Andreas=20F=C3=A4rber?= Commit 667d22d1ae59da46b4c1fbd094ca61145f19b8c3 (qdev: move bus removal to object_unparent) made the assumption that at unparenting time parent_bus is not NULL. This assumption is unjustified since object_unparent() may well be called directly after object_initialize(), without any qdev_set_parent_bus(). This did not cause any issues yet because qdev_[try_]create() does call qdev_set_parent_bus(), falling back to SysBus if unsupplied. While at it, ensure that this new function uses the device_ prefix and make the name more neutral in light of this semantic change. Reported-by: Eduardo Habkost Signed-off-by: Andreas F=C3=A4rber Tested-by: Igor Mammedov --- hw/qdev.c | 8 +++++--- 1 Datei ge=C3=A4ndert, 5 Zeilen hinzugef=C3=BCgt(+), 3 Zeilen entfernt(-= ) diff --git a/hw/qdev.c b/hw/qdev.c index f2c2484..e2a5c57 100644 --- a/hw/qdev.c +++ b/hw/qdev.c @@ -698,16 +698,18 @@ static void device_class_base_init(ObjectClass *cla= ss, void *data) klass->props =3D NULL; } =20 -static void qdev_remove_from_bus(Object *obj) +static void device_unparent(Object *obj) { DeviceState *dev =3D DEVICE(obj); =20 - bus_remove_child(dev->parent_bus, dev); + if (dev->parent_bus !=3D NULL) { + bus_remove_child(dev->parent_bus, dev); + } } =20 static void device_class_init(ObjectClass *class, void *data) { - class->unparent =3D qdev_remove_from_bus; + class->unparent =3D device_unparent; } =20 void device_reset(DeviceState *dev) --=20 1.7.10.4