qemu-devel
[Top][All Lists]
Advanced

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

[Qemu-devel] [RFC 07/15] machine: Add MachineClass::default_buses field


From: Eduardo Habkost
Subject: [Qemu-devel] [RFC 07/15] machine: Add MachineClass::default_buses field
Date: Mon, 21 Nov 2016 23:12:05 -0200

The new field can be populated by class_init functions with the
list of bus types that are created by default when the machine is
initialized. It will be used to build the device type
compatibility list on 'query-machines' output.

As a TYPE_SYSTEM_BUS bus is always created, add it to the default
list on TYPE_MACHINE.

Signed-off-by: Eduardo Habkost <address@hidden>
---
 hw/core/machine.c   | 18 +++++++++++++++++-
 include/hw/boards.h |  5 +++++
 2 files changed, 22 insertions(+), 1 deletion(-)

diff --git a/hw/core/machine.c b/hw/core/machine.c
index b0fd91f..8d55c1a 100644
--- a/hw/core/machine.c
+++ b/hw/core/machine.c
@@ -357,6 +357,13 @@ static void machine_init_notify(Notifier *notifier, void 
*data)
     foreach_dynamic_sysbus_device(error_on_sysbus_device, NULL);
 }
 
+void machine_class_add_default_bus(MachineClass *mc, const char *typename)
+{
+    mc->default_buses =
+        g_list_append(mc->default_buses, g_strdup(typename));
+
+}
+
 static void machine_class_init(ObjectClass *oc, void *data)
 {
     MachineClass *mc = MACHINE_CLASS(oc);
@@ -365,6 +372,8 @@ static void machine_class_init(ObjectClass *oc, void *data)
     mc->default_ram_size = 128 * M_BYTE;
     mc->rom_file_has_mr = true;
 
+    machine_class_add_default_bus(mc, TYPE_SYSTEM_BUS);
+
     object_class_property_add_str(oc, "accel",
         machine_get_accel, machine_set_accel, &error_abort);
     object_class_property_set_description(oc, "accel",
@@ -466,13 +475,20 @@ static void machine_class_init(ObjectClass *oc, void 
*data)
 
 static void machine_class_base_init(ObjectClass *oc, void *data)
 {
+    MachineClass *mc = MACHINE_CLASS(oc);
+
     if (!object_class_is_abstract(oc)) {
-        MachineClass *mc = MACHINE_CLASS(oc);
         const char *cname = object_class_get_name(oc);
         assert(g_str_has_suffix(cname, TYPE_MACHINE_SUFFIX));
         mc->name = g_strndup(cname,
                             strlen(cname) - strlen(TYPE_MACHINE_SUFFIX));
     }
+
+    /*FIXME: this should be g_list_copy_deep(), but it requires
+     * a more recent GLib version. Should be replaced with something
+     * equivalent.
+     */
+    mc->default_buses = g_list_copy(mc->default_buses);
 }
 
 static void machine_initfn(Object *obj)
diff --git a/include/hw/boards.h b/include/hw/boards.h
index a51da9c..78348ff 100644
--- a/include/hw/boards.h
+++ b/include/hw/boards.h
@@ -42,6 +42,8 @@ bool machine_dump_guest_core(MachineState *machine);
 bool machine_mem_merge(MachineState *machine);
 void machine_register_compat_props(MachineState *machine);
 
+void machine_class_add_default_bus(MachineClass *mc, const char *typename);
+
 /**
  * CPUArchId:
  * @arch_id - architecture-dependent CPU ID of present or possible CPU
@@ -92,6 +94,8 @@ typedef struct {
  *    size than the target architecture's minimum. (Attempting to create
  *    such a CPU will fail.) Note that changing this is a migration
  *    compatibility break for the machine.
+ * @default_buses:
+ *    List of typenames of buses that are created by default by the machine.
  */
 struct MachineClass {
     /*< private >*/
@@ -131,6 +135,7 @@ struct MachineClass {
     bool option_rom_has_mr;
     bool rom_file_has_mr;
     int minimum_page_bits;
+    GList *default_buses;
 
     HotplugHandler *(*get_hotplug_handler)(MachineState *machine,
                                            DeviceState *dev);
-- 
2.7.4




reply via email to

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