From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([208.118.235.92]:44840) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1TsD2m-00020m-Hg for qemu-devel@nongnu.org; Mon, 07 Jan 2013 08:47:18 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1TsD2i-0001A3-Rc for qemu-devel@nongnu.org; Mon, 07 Jan 2013 08:47:12 -0500 Received: from mx1.redhat.com ([209.132.183.28]:52933) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1TsD2i-00019t-Ja for qemu-devel@nongnu.org; Mon, 07 Jan 2013 08:47:08 -0500 Date: Mon, 7 Jan 2013 14:47:00 +0100 From: Igor Mammedov Message-ID: <20130107144700.1cc540d4@thinkpad.mammed.net> In-Reply-To: <1357320880-10782-1-git-send-email-afaerber@suse.de> References: <1357320880-10782-1-git-send-email-afaerber@suse.de> Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Subject: Re: [Qemu-devel] [PATCH v2] qdev: Don't assume existence of parent bus on unparenting List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Andreas =?UTF-8?B?RsOkcmJlcg==?= Cc: Paolo Bonzini , qemu-devel@nongnu.org, anthony@codemonkey.ws, ehabkost@redhat.com On Fri, 4 Jan 2013 18:34:40 +0100 Andreas F=C3=A4rber wrote: > 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(). >=20 > This did not cause any issues yet because qdev_[try_]create() does call > qdev_set_parent_bus(), falling back to SysBus if unsupplied. >=20 > While at it, ensure that this new function uses the device_ prefix and > make the name more neutral in light of this semantic change. >=20 > Reported-by: Eduardo Habkost > Signed-off-by: Andreas F=C3=A4rber > Cc: Paolo Bonzini > --- > Planning to insert this before the final CPU-as-a-device patch on qom-cp= u, > to avoid a regression for, e.g., -cpu Haswell,enforce if unsupported by = host. >=20 > This supersedes my cosmetic patch in the "QOM realize, device-only" seri= es: >=20 > v1 -> v2: > * Make bus removal conditional on parent bus > * Rename function further >=20 > hw/qdev.c | 8 +++++--- > 1 Datei ge=C3=A4ndert, 5 Zeilen hinzugef=C3=BCgt(+), 3 Zeilen entfernt(-) >=20 > 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 >=20 > Works for me, Tested-By: Igor Mammedov --=20 Regards, Igor