qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Qemu-devel] [PATCH 11/25] qdev: pick global properties from superclasse


From: Paolo Bonzini
Subject: [Qemu-devel] [PATCH 11/25] qdev: pick global properties from superclasses
Date: Tue, 3 Apr 2012 13:15:39 +0200

In qdev, each bus in practice identified an abstract superclass, but
this was mostly hidden.  In QOM, instead, these abstract classes are
explicit so we can move bus properties there.

This patch moves global bus properties, an obscure feature when used
with the command-line which is actually useful and used when used by
backwards-compatible machine types.

Signed-off-by: Paolo Bonzini <address@hidden>
---
 hw/pc_piix.c         |   12 ++++++------
 hw/qdev-properties.c |   23 +++++++++++++----------
 2 files changed, 19 insertions(+), 16 deletions(-)

diff --git a/hw/pc_piix.c b/hw/pc_piix.c
index fadca4c..8bd6482 100644
--- a/hw/pc_piix.c
+++ b/hw/pc_piix.c
@@ -460,7 +460,7 @@ static QEMUMachine pc_machine_v0_13 = {
             .property = "rombar",
             .value    = stringify(0),
         },{
-            .driver   = "PCI",
+            .driver   = TYPE_PCI_DEVICE,
             .property = "command_serr_enable",
             .value    = "off",
         },{
@@ -520,7 +520,7 @@ static QEMUMachine pc_machine_v0_12 = {
             .property = "rombar",
             .value    = stringify(0),
         },{
-            .driver   = "PCI",
+            .driver   = TYPE_PCI_DEVICE,
             .property = "command_serr_enable",
             .value    = "off",
         },{
@@ -584,11 +584,11 @@ static QEMUMachine pc_machine_v0_11 = {
             .property = "ver",
             .value    = "0.11",
         },{
-            .driver   = "PCI",
+            .driver   = TYPE_PCI_DEVICE,
             .property = "rombar",
             .value    = stringify(0),
         },{
-            .driver   = "PCI",
+            .driver   = TYPE_PCI_DEVICE,
             .property = "command_serr_enable",
             .value    = "off",
         },{
@@ -664,11 +664,11 @@ static QEMUMachine pc_machine_v0_10 = {
             .property = "ver",
             .value    = "0.10",
         },{
-            .driver   = "PCI",
+            .driver   = TYPE_PCI_DEVICE,
             .property = "rombar",
             .value    = stringify(0),
         },{
-            .driver   = "PCI",
+            .driver   = TYPE_PCI_DEVICE,
             .property = "command_serr_enable",
             .value    = "off",
         },{
diff --git a/hw/qdev-properties.c b/hw/qdev-properties.c
index 85897c7..a9276f9 100644
--- a/hw/qdev-properties.c
+++ b/hw/qdev-properties.c
@@ -1101,17 +1101,20 @@ void qdev_prop_register_global_list(GlobalProperty 
*props)
 
 void qdev_prop_set_globals(DeviceState *dev)
 {
-    GlobalProperty *prop;
-
-    QTAILQ_FOREACH(prop, &global_props, next) {
-        if (strcmp(object_get_typename(OBJECT(dev)), prop->driver) != 0 &&
-            strcmp(qdev_get_bus_info(dev)->name, prop->driver) != 0) {
-            continue;
-        }
-        if (qdev_prop_parse(dev, prop->property, prop->value) != 0) {
-            exit(1);
+    ObjectClass *class = object_get_class(OBJECT(dev));
+
+    do {
+        GlobalProperty *prop;
+        QTAILQ_FOREACH(prop, &global_props, next) {
+            if (strcmp(object_class_get_name(class), prop->driver) != 0) {
+                continue;
+            }
+            if (qdev_prop_parse(dev, prop->property, prop->value) != 0) {
+                exit(1);
+            }
         }
-    }
+        class = object_class_get_parent(class);
+    } while (class);
 }
 
 static int qdev_add_one_global(QemuOpts *opts, void *opaque)
-- 
1.7.9.3





reply via email to

[Prev in Thread] Current Thread [Next in Thread]