ARM virt machine type (machvirt) had been stable for a while. But recently new devices have been added to support extra features. Considerring the support of long-term compatibility, it is time to create a version-based machine types.
This patch defines a qemu 2.2 specific machine type (machvirt-2.2) and points the default machvirt to it. In the future new machine types can follow a similar naming scheme (e.g. machvirt-3.0, ...). Note that this patch doesn't change the semantic of existing QEMU command line. With this patch, machine type querry (-M ?) will print the following: virt ARM Virtual Machine v2.2 (alias of machvirt-2.2) machvirt-2.2 ARM Virtual Machine v2.2 (default) Signed-off-by: Wei Huang <w...@redhat.com> --- hw/arm/virt.c | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/hw/arm/virt.c b/hw/arm/virt.c index 2353440..6174abd 100644 --- a/hw/arm/virt.c +++ b/hw/arm/virt.c @@ -701,15 +701,37 @@ static void virt_class_init(ObjectClass *oc, void *data) static const TypeInfo machvirt_info = { .name = TYPE_VIRT_MACHINE, .parent = TYPE_MACHINE, + .abstract = true, .instance_size = sizeof(VirtMachineState), .instance_init = virt_instance_init, .class_size = sizeof(VirtMachineClass), .class_init = virt_class_init, }; +static void machvirt_2_2_class_init(ObjectClass *oc, void *data) +{ + MachineClass *mc = MACHINE_CLASS(oc); + static GlobalProperty compat_props[] = { + { /* end of list */ } + }; + + mc->name = "machvirt-2.2"; + mc->desc = "ARM Virtual Machine v2.2"; + mc->alias = "virt"; + mc->is_default = 1; + mc->compat_props = compat_props; +} + +static const TypeInfo machvirt_2_2_info = { + .name = TYPE_VIRT_MACHINE "-2.2", + .parent = TYPE_VIRT_MACHINE, + .class_init = machvirt_2_2_class_init, +}; + static void machvirt_machine_init(void) { type_register_static(&machvirt_info); + type_register_static(&machvirt_2_2_info); } machine_init(machvirt_machine_init); -- 1.8.3.1