From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:33961) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1c8ze0-0005h7-7H for qemu-devel@nongnu.org; Mon, 21 Nov 2016 20:13:10 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1c8zdz-0004v5-2c for qemu-devel@nongnu.org; Mon, 21 Nov 2016 20:13:08 -0500 Received: from mx1.redhat.com ([209.132.183.28]:60024) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1c8zdy-0004ud-Pa for qemu-devel@nongnu.org; Mon, 21 Nov 2016 20:13:07 -0500 Received: from int-mx11.intmail.prod.int.phx2.redhat.com (int-mx11.intmail.prod.int.phx2.redhat.com [10.5.11.24]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id E0946C057FAC for ; Tue, 22 Nov 2016 01:13:04 +0000 (UTC) From: Eduardo Habkost Date: Mon, 21 Nov 2016 23:12:05 -0200 Message-Id: <1479777133-23567-8-git-send-email-ehabkost@redhat.com> In-Reply-To: <1479777133-23567-1-git-send-email-ehabkost@redhat.com> References: <1479777133-23567-1-git-send-email-ehabkost@redhat.com> Subject: [Qemu-devel] [RFC 07/15] machine: Add MachineClass::default_buses field List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org, Markus Armbruster , Marcel Apfelbaum , "Michael S. Tsirkin" 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 --- 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