From nobody Wed Nov 5 06:39:58 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1499733914786694.316241493474; Mon, 10 Jul 2017 17:45:14 -0700 (PDT) Received: from localhost ([::1]:43592 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dUjIe-0006DO-Uy for importer@patchew.org; Mon, 10 Jul 2017 20:45:13 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:55499) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dUjGl-0004hG-Ow for qemu-devel@nongnu.org; Mon, 10 Jul 2017 20:43:16 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dUjGk-0007nr-2I for qemu-devel@nongnu.org; Mon, 10 Jul 2017 20:43:15 -0400 Received: from mx1.redhat.com ([209.132.183.28]:53346) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1dUjGj-0007nh-S7 for qemu-devel@nongnu.org; Mon, 10 Jul 2017 20:43:13 -0400 Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.phx2.redhat.com [10.5.11.14]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id C2F323B714; Tue, 11 Jul 2017 00:43:12 +0000 (UTC) Received: from localhost.localdomain.com (ovpn-116-74.gru2.redhat.com [10.97.116.74]) by smtp.corp.redhat.com (Postfix) with ESMTP id 3AFE761B8B; Tue, 11 Jul 2017 00:43:11 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com C2F323B714 Authentication-Results: ext-mx06.extmail.prod.ext.phx2.redhat.com; dmarc=none (p=none dis=none) header.from=redhat.com Authentication-Results: ext-mx06.extmail.prod.ext.phx2.redhat.com; spf=pass smtp.mailfrom=ehabkost@redhat.com DKIM-Filter: OpenDKIM Filter v2.11.0 mx1.redhat.com C2F323B714 From: Eduardo Habkost To: qemu-devel@nongnu.org Date: Mon, 10 Jul 2017 21:43:01 -0300 Message-Id: <20170711004303.3902-2-ehabkost@redhat.com> In-Reply-To: <20170711004303.3902-1-ehabkost@redhat.com> References: <20170711004303.3902-1-ehabkost@redhat.com> X-Scanned-By: MIMEDefang 2.79 on 10.5.11.14 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.30]); Tue, 11 Jul 2017 00:43:12 +0000 (UTC) X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 209.132.183.28 Subject: [Qemu-devel] [PATCH 1/3] qdev: fix the order compat and global properties are applied X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Marcel Apfelbaum , Halil Pasic , Cornelia Huck , Greg Kurz Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" From: Greg Kurz The current code recursively applies global properties from child up to parent types. This can cause properties passed with the -global option to be silently overridden by internal compat properties. This is exactly what happens with virtio-*-pci drivers since commit: "9a4c0e220d8a hw/virtio-pci: fix virtio behaviour" Passing -device virtio-blk-pci.disable-modern=3Doff has no effect on 2.6 machine types because the internal virtio-pci.disable-modern=3Don compat property always prevail. This patch fixes the issue by reversing the logic: we now go through the global property list and, for each property, we check if it is applicable to the device. This result in compat properties being applied first, in the order they appear in the HW_COMPAT_* macros, followed by global properties, in they order appear on the command line. Signed-off-by: Greg Kurz Message-Id: <148103887228.22326.478406873609299999.stgit@bahia.lab.toulouse= -stg.fr.ibm.com> Signed-off-by: Eduardo Habkost Reviewed-by: Cornelia Huck Reviewed-by: Halil Pasic --- hw/core/qdev-properties.c | 15 ++------------- 1 file changed, 2 insertions(+), 13 deletions(-) diff --git a/hw/core/qdev-properties.c b/hw/core/qdev-properties.c index f11d578..41cca9d 100644 --- a/hw/core/qdev-properties.c +++ b/hw/core/qdev-properties.c @@ -1148,8 +1148,7 @@ int qdev_prop_check_globals(void) return ret; } =20 -static void qdev_prop_set_globals_for_type(DeviceState *dev, - const char *typename) +void qdev_prop_set_globals(DeviceState *dev) { GList *l; =20 @@ -1157,7 +1156,7 @@ static void qdev_prop_set_globals_for_type(DeviceStat= e *dev, GlobalProperty *prop =3D l->data; Error *err =3D NULL; =20 - if (strcmp(typename, prop->driver) !=3D 0) { + if (object_dynamic_cast(OBJECT(dev), prop->driver) =3D=3D NULL) { continue; } prop->used =3D true; @@ -1175,16 +1174,6 @@ static void qdev_prop_set_globals_for_type(DeviceSta= te *dev, } } =20 -void qdev_prop_set_globals(DeviceState *dev) -{ - ObjectClass *class =3D object_get_class(OBJECT(dev)); - - do { - qdev_prop_set_globals_for_type(dev, object_class_get_name(class)); - class =3D object_class_get_parent(class); - } while (class); -} - /* --- 64bit unsigned int 'size' type --- */ =20 static void get_size(Object *obj, Visitor *v, const char *name, void *opaq= ue, --=20 2.9.4 From nobody Wed Nov 5 06:39:58 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1499733914787402.0281899731874; Mon, 10 Jul 2017 17:45:14 -0700 (PDT) Received: from localhost ([::1]:43590 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dUjIb-0006CD-Nd for importer@patchew.org; Mon, 10 Jul 2017 20:45:09 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:55523) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dUjGm-0004hI-QR for qemu-devel@nongnu.org; Mon, 10 Jul 2017 20:43:17 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dUjGl-0007oQ-UR for qemu-devel@nongnu.org; Mon, 10 Jul 2017 20:43:16 -0400 Received: from mx1.redhat.com ([209.132.183.28]:49088) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1dUjGl-0007o6-O4 for qemu-devel@nongnu.org; Mon, 10 Jul 2017 20:43:15 -0400 Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.phx2.redhat.com [10.5.11.14]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id A6BD1C049E32; Tue, 11 Jul 2017 00:43:14 +0000 (UTC) Received: from localhost.localdomain.com (ovpn-116-74.gru2.redhat.com [10.97.116.74]) by smtp.corp.redhat.com (Postfix) with ESMTP id 22B745DC1D; Tue, 11 Jul 2017 00:43:12 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com A6BD1C049E32 Authentication-Results: ext-mx07.extmail.prod.ext.phx2.redhat.com; dmarc=none (p=none dis=none) header.from=redhat.com Authentication-Results: ext-mx07.extmail.prod.ext.phx2.redhat.com; spf=pass smtp.mailfrom=ehabkost@redhat.com DKIM-Filter: OpenDKIM Filter v2.11.0 mx1.redhat.com A6BD1C049E32 From: Eduardo Habkost To: qemu-devel@nongnu.org Date: Mon, 10 Jul 2017 21:43:02 -0300 Message-Id: <20170711004303.3902-3-ehabkost@redhat.com> In-Reply-To: <20170711004303.3902-1-ehabkost@redhat.com> References: <20170711004303.3902-1-ehabkost@redhat.com> X-Scanned-By: MIMEDefang 2.79 on 10.5.11.14 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.31]); Tue, 11 Jul 2017 00:43:14 +0000 (UTC) X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 209.132.183.28 Subject: [Qemu-devel] [PATCH 2/3] test-qdev-global-props: Test global property ordering X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Marcel Apfelbaum , Halil Pasic , Cornelia Huck , Greg Kurz Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Test case to detect the bug fixed by commit "qdev: fix the order compat and global properties are applied". Signed-off-by: Eduardo Habkost Reviewed-by: Cornelia Huck Reviewed-by: Greg Kurz Reviewed-by: Halil Pasic --- tests/test-qdev-global-props.c | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/tests/test-qdev-global-props.c b/tests/test-qdev-global-props.c index 48e5b73..ef2951f 100644 --- a/tests/test-qdev-global-props.c +++ b/tests/test-qdev-global-props.c @@ -33,6 +33,8 @@ #define STATIC_TYPE(obj) \ OBJECT_CHECK(MyType, (obj), TYPE_STATIC_PROPS) =20 +#define TYPE_SUBCLASS "static_prop_subtype" + #define PROP_DEFAULT 100 =20 typedef struct MyType { @@ -63,6 +65,11 @@ static const TypeInfo static_prop_type =3D { .class_init =3D static_prop_class_init, }; =20 +static const TypeInfo subclass_type =3D { + .name =3D TYPE_SUBCLASS, + .parent =3D TYPE_STATIC_PROPS, +}; + /* Test simple static property setting to default value */ static void test_static_prop_subprocess(void) { @@ -279,12 +286,35 @@ static void test_dynamic_globalprop_nouser(void) g_test_trap_assert_stdout(""); } =20 +/* Test if global props affecting subclasses are applied in the right orde= r */ +static void test_subclass_global_props(void) +{ + MyType *mt; + /* Global properties must be applied in the order they were registered= */ + static GlobalProperty props[] =3D { + { TYPE_STATIC_PROPS, "prop1", "101" }, + { TYPE_SUBCLASS, "prop1", "102" }, + { TYPE_SUBCLASS, "prop2", "103" }, + { TYPE_STATIC_PROPS, "prop2", "104" }, + {} + }; + + qdev_prop_register_global_list(props); + + mt =3D STATIC_TYPE(object_new(TYPE_SUBCLASS)); + qdev_init_nofail(DEVICE(mt)); + + g_assert_cmpuint(mt->prop1, =3D=3D, 102); + g_assert_cmpuint(mt->prop2, =3D=3D, 104); +} + int main(int argc, char **argv) { g_test_init(&argc, &argv, NULL); =20 module_call_init(MODULE_INIT_QOM); type_register_static(&static_prop_type); + type_register_static(&subclass_type); type_register_static(&dynamic_prop_type); type_register_static(&hotplug_type); type_register_static(&nohotplug_type); @@ -310,6 +340,9 @@ int main(int argc, char **argv) g_test_add_func("/qdev/properties/dynamic/global/nouser", test_dynamic_globalprop_nouser); =20 + g_test_add_func("/qdev/properties/global/subclass", + test_subclass_global_props); + g_test_run(); =20 return 0; --=20 2.9.4 From nobody Wed Nov 5 06:39:58 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1499733915881439.33409088931023; Mon, 10 Jul 2017 17:45:15 -0700 (PDT) Received: from localhost ([::1]:43593 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dUjIg-0006EU-NL for importer@patchew.org; Mon, 10 Jul 2017 20:45:14 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:55539) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dUjGo-0004hk-Kx for qemu-devel@nongnu.org; Mon, 10 Jul 2017 20:43:19 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dUjGn-0007p3-Q9 for qemu-devel@nongnu.org; Mon, 10 Jul 2017 20:43:18 -0400 Received: from mx1.redhat.com ([209.132.183.28]:45232) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1dUjGn-0007or-Jt for qemu-devel@nongnu.org; Mon, 10 Jul 2017 20:43:17 -0400 Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.phx2.redhat.com [10.5.11.14]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 90432C0587E6; Tue, 11 Jul 2017 00:43:16 +0000 (UTC) Received: from localhost.localdomain.com (ovpn-116-74.gru2.redhat.com [10.97.116.74]) by smtp.corp.redhat.com (Postfix) with ESMTP id 0910C5DD71; Tue, 11 Jul 2017 00:43:14 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com 90432C0587E6 Authentication-Results: ext-mx08.extmail.prod.ext.phx2.redhat.com; dmarc=none (p=none dis=none) header.from=redhat.com Authentication-Results: ext-mx08.extmail.prod.ext.phx2.redhat.com; spf=pass smtp.mailfrom=ehabkost@redhat.com DKIM-Filter: OpenDKIM Filter v2.11.0 mx1.redhat.com 90432C0587E6 From: Eduardo Habkost To: qemu-devel@nongnu.org Date: Mon, 10 Jul 2017 21:43:03 -0300 Message-Id: <20170711004303.3902-4-ehabkost@redhat.com> In-Reply-To: <20170711004303.3902-1-ehabkost@redhat.com> References: <20170711004303.3902-1-ehabkost@redhat.com> X-Scanned-By: MIMEDefang 2.79 on 10.5.11.14 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.32]); Tue, 11 Jul 2017 00:43:16 +0000 (UTC) X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 209.132.183.28 Subject: [Qemu-devel] [PATCH 3/3] Revert "machine: Convert abstract typename on compat_props to subclass names" X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Marcel Apfelbaum , Halil Pasic , Cornelia Huck , Greg Kurz Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" This reverts commit 0bcba41fe379e4c6834adcf1456d9099db31a5b2. The bug addressed by that commit is now fixed in a better way by the commit "qdev: fix the order compat and global properties are applied". Signed-off-by: Eduardo Habkost Acked-by: Cornelia Huck Reviewed-by: Greg Kurz Reviewed-by: Halil Pasic --- hw/core/machine.c | 26 +++----------------------- 1 file changed, 3 insertions(+), 23 deletions(-) diff --git a/hw/core/machine.c b/hw/core/machine.c index ecb5552..1d10b01 100644 --- a/hw/core/machine.c +++ b/hw/core/machine.c @@ -770,18 +770,11 @@ static void machine_class_finalize(ObjectClass *klass= , void *data) g_free(mc->name); } =20 -static void machine_register_compat_for_subclass(ObjectClass *oc, void *op= aque) -{ - GlobalProperty *p =3D opaque; - register_compat_prop(object_class_get_name(oc), p->property, p->value); -} - void machine_register_compat_props(MachineState *machine) { MachineClass *mc =3D MACHINE_GET_CLASS(machine); int i; GlobalProperty *p; - ObjectClass *oc; =20 if (!mc->compat_props) { return; @@ -789,22 +782,9 @@ void machine_register_compat_props(MachineState *machi= ne) =20 for (i =3D 0; i < mc->compat_props->len; i++) { p =3D g_array_index(mc->compat_props, GlobalProperty *, i); - oc =3D object_class_by_name(p->driver); - if (oc && object_class_is_abstract(oc)) { - /* temporary hack to make sure we do not override - * globals set explicitly on -global: if an abstract class - * is on compat_props, register globals for all its - * non-abstract subtypes instead. - * - * This doesn't solve the problem for cases where - * a non-abstract typename mentioned on compat_props - * has subclasses, like spapr-pci-host-bridge. - */ - object_class_foreach(machine_register_compat_for_subclass, - p->driver, false, p); - } else { - register_compat_prop(p->driver, p->property, p->value); - } + /* Machine compat_props must never cause errors: */ + p->errp =3D &error_abort; + qdev_prop_register_global(p); } } =20 --=20 2.9.4