Re: [PATCH v2 3/5] hw/loongarch: Add compat machine for 9.0
在 2024/2/27 10:30, Bibo Mao 写道: Since migration test case requires compat machine type support, compat machine is added for qemu 9.0 here. Signed-off-by: Bibo Mao --- hw/loongarch/virt.c | 60 +++-- 1 file changed, 47 insertions(+), 13 deletions(-) Reviewed-by: Song Gao Thanks. Song Gao diff --git a/hw/loongarch/virt.c b/hw/loongarch/virt.c index 3bc35c58c9..f37f642ede 100644 --- a/hw/loongarch/virt.c +++ b/hw/loongarch/virt.c @@ -46,6 +46,32 @@ #include "hw/block/flash.h" #include "qemu/error-report.h" +#define DEFINE_VIRT_MACHINE_LATEST(major, minor, latest) \ +static void virt_##major##_##minor##_class_init(ObjectClass *oc, \ +void *data) \ +{ \ +MachineClass *mc = MACHINE_CLASS(oc); \ +virt_machine_##major##_##minor##_options(mc); \ +mc->desc = "QEMU " # major "." # minor " ARM Virtual Machine"; \ +if (latest) { \ +mc->alias = "virt"; \ +} \ +} \ +static const TypeInfo machvirt_##major##_##minor##_info = { \ +.name = MACHINE_TYPE_NAME("virt-" # major "." # minor), \ +.parent = TYPE_VIRT_MACHINE, \ +.class_init = virt_##major##_##minor##_class_init, \ +}; \ +static void machvirt_machine_##major##_##minor##_init(void) \ +{ \ +type_register_static(_##major##_##minor##_info); \ +} \ +type_init(machvirt_machine_##major##_##minor##_init); + +#define DEFINE_VIRT_MACHINE_AS_LATEST(major, minor) \ +DEFINE_VIRT_MACHINE_LATEST(major, minor, true) +#define DEFINE_VIRT_MACHINE(major, minor) \ +DEFINE_VIRT_MACHINE_LATEST(major, minor, false) struct loaderparams { uint64_t ram_size; @@ -1200,18 +1226,26 @@ static void virt_class_init(ObjectClass *oc, void *data) #endif } -static const TypeInfo virt_machine_types[] = { -{ -.name = TYPE_VIRT_MACHINE, -.parent = TYPE_MACHINE, -.instance_size = sizeof(VirtMachineState), -.class_init = virt_class_init, -.instance_init = virt_machine_initfn, -.interfaces = (InterfaceInfo[]) { - { TYPE_HOTPLUG_HANDLER }, - { } -}, -} +static const TypeInfo virt_machine_info = { +.name = TYPE_VIRT_MACHINE, +.parent = TYPE_MACHINE, +.abstract = true, +.instance_size = sizeof(VirtMachineState), +.class_init = virt_class_init, +.instance_init = virt_machine_initfn, +.interfaces = (InterfaceInfo[]) { +{ TYPE_HOTPLUG_HANDLER }, +{ } +}, }; -DEFINE_TYPES(virt_machine_types) +static void machvirt_machine_init(void) +{ +type_register_static(_machine_info); +} +type_init(machvirt_machine_init); + +static void virt_machine_9_0_options(MachineClass *mc) +{ +} +DEFINE_VIRT_MACHINE_AS_LATEST(9, 0)
[PATCH v2 3/5] hw/loongarch: Add compat machine for 9.0
Since migration test case requires compat machine type support, compat machine is added for qemu 9.0 here. Signed-off-by: Bibo Mao --- hw/loongarch/virt.c | 60 +++-- 1 file changed, 47 insertions(+), 13 deletions(-) diff --git a/hw/loongarch/virt.c b/hw/loongarch/virt.c index 3bc35c58c9..f37f642ede 100644 --- a/hw/loongarch/virt.c +++ b/hw/loongarch/virt.c @@ -46,6 +46,32 @@ #include "hw/block/flash.h" #include "qemu/error-report.h" +#define DEFINE_VIRT_MACHINE_LATEST(major, minor, latest) \ +static void virt_##major##_##minor##_class_init(ObjectClass *oc, \ +void *data) \ +{ \ +MachineClass *mc = MACHINE_CLASS(oc); \ +virt_machine_##major##_##minor##_options(mc); \ +mc->desc = "QEMU " # major "." # minor " ARM Virtual Machine"; \ +if (latest) { \ +mc->alias = "virt"; \ +} \ +} \ +static const TypeInfo machvirt_##major##_##minor##_info = { \ +.name = MACHINE_TYPE_NAME("virt-" # major "." # minor), \ +.parent = TYPE_VIRT_MACHINE, \ +.class_init = virt_##major##_##minor##_class_init, \ +}; \ +static void machvirt_machine_##major##_##minor##_init(void) \ +{ \ +type_register_static(_##major##_##minor##_info); \ +} \ +type_init(machvirt_machine_##major##_##minor##_init); + +#define DEFINE_VIRT_MACHINE_AS_LATEST(major, minor) \ +DEFINE_VIRT_MACHINE_LATEST(major, minor, true) +#define DEFINE_VIRT_MACHINE(major, minor) \ +DEFINE_VIRT_MACHINE_LATEST(major, minor, false) struct loaderparams { uint64_t ram_size; @@ -1200,18 +1226,26 @@ static void virt_class_init(ObjectClass *oc, void *data) #endif } -static const TypeInfo virt_machine_types[] = { -{ -.name = TYPE_VIRT_MACHINE, -.parent = TYPE_MACHINE, -.instance_size = sizeof(VirtMachineState), -.class_init = virt_class_init, -.instance_init = virt_machine_initfn, -.interfaces = (InterfaceInfo[]) { - { TYPE_HOTPLUG_HANDLER }, - { } -}, -} +static const TypeInfo virt_machine_info = { +.name = TYPE_VIRT_MACHINE, +.parent = TYPE_MACHINE, +.abstract = true, +.instance_size = sizeof(VirtMachineState), +.class_init = virt_class_init, +.instance_init = virt_machine_initfn, +.interfaces = (InterfaceInfo[]) { +{ TYPE_HOTPLUG_HANDLER }, +{ } +}, }; -DEFINE_TYPES(virt_machine_types) +static void machvirt_machine_init(void) +{ +type_register_static(_machine_info); +} +type_init(machvirt_machine_init); + +static void virt_machine_9_0_options(MachineClass *mc) +{ +} +DEFINE_VIRT_MACHINE_AS_LATEST(9, 0) -- 2.39.3