Patchwork [FOR,0.12,v4,01/22] qdev: make compat stuff more generic

login
register
mail settings
Submitter Gerd Hoffmann
Date Dec. 8, 2009, 12:11 p.m.
Message ID <1260274314-2906-2-git-send-email-kraxel@redhat.com>
Download mbox | patch
Permalink /patch/40612/
State New
Headers show

Comments

Gerd Hoffmann - Dec. 8, 2009, 12:11 p.m.
This patch renames the compat properties into global properties and
makes them more generic.  The compatibility stuff is only one of
multiple possible users now.

Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
 hw/boards.h          |    2 +-
 hw/pc.c              |    2 +-
 hw/qdev-properties.c |   22 ++++++++++++++--------
 hw/qdev.c            |    2 +-
 hw/qdev.h            |   10 ++++++----
 vl.c                 |    2 +-
 6 files changed, 24 insertions(+), 16 deletions(-)

Patch

diff --git a/hw/boards.h b/hw/boards.h
index d889341..7a0f20f 100644
--- a/hw/boards.h
+++ b/hw/boards.h
@@ -20,7 +20,7 @@  typedef struct QEMUMachine {
     int use_scsi;
     int max_cpus;
     int is_default;
-    CompatProperty *compat_props;
+    GlobalProperty *compat_props;
     struct QEMUMachine *next;
 } QEMUMachine;
 
diff --git a/hw/pc.c b/hw/pc.c
index 8c1b7ea..147a9a7 100644
--- a/hw/pc.c
+++ b/hw/pc.c
@@ -1298,7 +1298,7 @@  static QEMUMachine pc_machine_v0_10 = {
     .desc = "Standard PC, qemu 0.10",
     .init = pc_init_pci,
     .max_cpus = 255,
-    .compat_props = (CompatProperty[]) {
+    .compat_props = (GlobalProperty[]) {
         {
             .driver   = "virtio-blk-pci",
             .property = "class",
diff --git a/hw/qdev-properties.c b/hw/qdev-properties.c
index bda6699..fe106bd 100644
--- a/hw/qdev-properties.c
+++ b/hw/qdev-properties.c
@@ -593,21 +593,27 @@  void qdev_prop_set_defaults(DeviceState *dev, Property *props)
     }
 }
 
-static CompatProperty *compat_props;
+static QTAILQ_HEAD(, GlobalProperty) global_props = QTAILQ_HEAD_INITIALIZER(global_props);
 
-void qdev_prop_register_compat(CompatProperty *props)
+void qdev_prop_register_global(GlobalProperty *prop)
 {
-    compat_props = props;
+    QTAILQ_INSERT_TAIL(&global_props, prop, next);
 }
 
-void qdev_prop_set_compat(DeviceState *dev)
+void qdev_prop_register_global_list(GlobalProperty *props)
 {
-    CompatProperty *prop;
+    int i;
 
-    if (!compat_props) {
-        return;
+    for (i = 0; props[i].driver != NULL; i++) {
+        qdev_prop_register_global(props+i);
     }
-    for (prop = compat_props; prop->driver != NULL; prop++) {
+}
+
+void qdev_prop_set_globals(DeviceState *dev)
+{
+    GlobalProperty *prop;
+
+    QTAILQ_FOREACH(prop, &global_props, next) {
         if (strcmp(dev->info->name, prop->driver) != 0) {
             continue;
         }
diff --git a/hw/qdev.c b/hw/qdev.c
index 13c9fe2..b6bd4ae 100644
--- a/hw/qdev.c
+++ b/hw/qdev.c
@@ -103,7 +103,7 @@  DeviceState *qdev_create(BusState *bus, const char *name)
     dev->parent_bus = bus;
     qdev_prop_set_defaults(dev, dev->info->props);
     qdev_prop_set_defaults(dev, dev->parent_bus->info->props);
-    qdev_prop_set_compat(dev);
+    qdev_prop_set_globals(dev);
     QLIST_INSERT_HEAD(&bus->children, dev, sibling);
     if (qdev_hotplug) {
         assert(bus->allow_hotplug);
diff --git a/hw/qdev.h b/hw/qdev.h
index 8d53754..bbcdba1 100644
--- a/hw/qdev.h
+++ b/hw/qdev.h
@@ -92,11 +92,12 @@  struct PropertyInfo {
     int (*print)(DeviceState *dev, Property *prop, char *dest, size_t len);
 };
 
-struct CompatProperty {
+typedef struct GlobalProperty {
     const char *driver;
     const char *property;
     const char *value;
-};
+    QTAILQ_ENTRY(GlobalProperty) next;
+} GlobalProperty;
 
 /*** Board API.  This should go away once we have a machine config file.  ***/
 
@@ -256,8 +257,9 @@  void qdev_prop_set_macaddr(DeviceState *dev, const char *name, uint8_t *value);
 void qdev_prop_set_ptr(DeviceState *dev, const char *name, void *value);
 void qdev_prop_set_defaults(DeviceState *dev, Property *props);
 
-void qdev_prop_register_compat(CompatProperty *props);
-void qdev_prop_set_compat(DeviceState *dev);
+void qdev_prop_register_global(GlobalProperty *prop);
+void qdev_prop_register_global_list(GlobalProperty *props);
+void qdev_prop_set_globals(DeviceState *dev);
 
 /* This is a nasty hack to allow passing a NULL bus to qdev_create.  */
 extern struct BusInfo system_bus_info;
diff --git a/vl.c b/vl.c
index 09a0ec5..a242a11 100644
--- a/vl.c
+++ b/vl.c
@@ -5779,7 +5779,7 @@  int main(int argc, char **argv, char **envp)
     }
 
     if (machine->compat_props) {
-        qdev_prop_register_compat(machine->compat_props);
+        qdev_prop_register_global_list(machine->compat_props);
     }
     machine->init(ram_size, boot_devices,
                   kernel_filename, kernel_cmdline, initrd_filename, cpu_model);