In preparation for future ARM virt machine types, this patch creates an abstract type for all ARM machines. The current machine type in QEMU (i.e. "virt") is renamed to "virt-2.5", which is similar to other architectures. For the purpose of backward compatibility, "virt" is converted to an alias, pointing to "virt-2.5". With this patch, "qemu -M ?" lists the following virtual machine types:
virt QEMU 2.5 ARM Virtual Machine (alias of virt-2.5) virt-2.5 QEMU 2.5 ARM Virtual Machine Signed-off-by: Wei Huang <w...@redhat.com> --- hw/arm/virt.c | 24 +++++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/hw/arm/virt.c b/hw/arm/virt.c index 44bbbea..ee15301 100644 --- a/hw/arm/virt.c +++ b/hw/arm/virt.c @@ -1251,6 +1251,19 @@ static void virt_set_gic_version(Object *obj, const char *value, Error **errp) } } +static void virt_machine_class_init(ObjectClass *oc, void *data) +{ +} + +static const TypeInfo virt_machine_info = { + .name = TYPE_VIRT_MACHINE, + .parent = TYPE_MACHINE, + .abstract = true, + .instance_size = sizeof(VirtMachineState), + .class_size = sizeof(VirtMachineClass), + .class_init = virt_machine_class_init, +}; + static void virt_instance_init(Object *obj) { VirtMachineState *vms = VIRT_MACHINE(obj); @@ -1288,7 +1301,9 @@ static void virt_class_init(ObjectClass *oc, void *data) { MachineClass *mc = MACHINE_CLASS(oc); - mc->desc = "ARM Virtual Machine", + mc->desc = "QEMU 2.5 ARM Virtual Machine"; + mc->alias = "virt"; + mc->is_default = 1; mc->init = machvirt_init; /* Start max_cpus at the maximum QEMU supports. We'll further restrict * it later in machvirt_init, where we have more information about the @@ -1302,16 +1317,15 @@ static void virt_class_init(ObjectClass *oc, void *data) } static const TypeInfo machvirt_info = { - .name = TYPE_VIRT_MACHINE, - .parent = TYPE_MACHINE, - .instance_size = sizeof(VirtMachineState), + .name = MACHINE_TYPE_NAME("virt-2.5"), + .parent = TYPE_VIRT_MACHINE, .instance_init = virt_instance_init, - .class_size = sizeof(VirtMachineClass), .class_init = virt_class_init, }; static void machvirt_machine_init(void) { + type_register_static(&virt_machine_info); type_register_static(&machvirt_info); } -- 1.8.3.1