* [RFC 0/2] hw/loongarch/virt: Add versioned machine type support
@ 2025-11-12 9:25 Bibo Mao
2025-11-12 9:25 ` [RFC 1/2] hw/loongarch/virt: Define virt machine type with type_init() Bibo Mao
2025-11-12 9:25 ` [RFC 2/2] hw/loongarch/virt: Define versioned virt machine Bibo Mao
0 siblings, 2 replies; 3+ messages in thread
From: Bibo Mao @ 2025-11-12 9:25 UTC (permalink / raw)
To: Song Gao; +Cc: Jiaxun Yang, qemu-devel
Now la464 CPU type feature is basically finished, versioned machine type
is added here for compatibility support in future.
It is targeted for QEMU 11.0, here it is RFC version.
Bibo Mao (2):
hw/loongarch/virt: Define virt machine type with type_init()
hw/loongarch/virt: Define versioned virt machine
hw/loongarch/virt.c | 66 ++++++++++++++++++++++++++++++++++++---------
1 file changed, 53 insertions(+), 13 deletions(-)
base-commit: 917ac07f9aef579b9538a81d45f45850aba42906
--
2.39.3
^ permalink raw reply [flat|nested] 3+ messages in thread
* [RFC 1/2] hw/loongarch/virt: Define virt machine type with type_init()
2025-11-12 9:25 [RFC 0/2] hw/loongarch/virt: Add versioned machine type support Bibo Mao
@ 2025-11-12 9:25 ` Bibo Mao
2025-11-12 9:25 ` [RFC 2/2] hw/loongarch/virt: Define versioned virt machine Bibo Mao
1 sibling, 0 replies; 3+ messages in thread
From: Bibo Mao @ 2025-11-12 9:25 UTC (permalink / raw)
To: Song Gao; +Cc: Jiaxun Yang, qemu-devel
Define virt machine with function type_init(), so that qemu versioned
virt machine can be added in later with similar method.
Signed-off-by: Bibo Mao <maobibo@loongson.cn>
---
hw/loongarch/virt.c | 29 ++++++++++++++++-------------
1 file changed, 16 insertions(+), 13 deletions(-)
diff --git a/hw/loongarch/virt.c b/hw/loongarch/virt.c
index 49434ad182..ed406e3410 100644
--- a/hw/loongarch/virt.c
+++ b/hw/loongarch/virt.c
@@ -1371,18 +1371,21 @@ static void virt_class_init(ObjectClass *oc, const void *data)
"The string may be up to 8 bytes in size");
}
-static const TypeInfo virt_machine_types[] = {
- {
- .name = TYPE_LOONGARCH_VIRT_MACHINE,
- .parent = TYPE_MACHINE,
- .instance_size = sizeof(LoongArchVirtMachineState),
- .class_init = virt_class_init,
- .instance_init = virt_initfn,
- .interfaces = (const InterfaceInfo[]) {
- { TYPE_HOTPLUG_HANDLER },
- { }
- },
- }
+static const TypeInfo virt_machine_info = {
+ .name = TYPE_LOONGARCH_VIRT_MACHINE,
+ .parent = TYPE_MACHINE,
+ .instance_size = sizeof(LoongArchVirtMachineState),
+ .class_init = virt_class_init,
+ .instance_init = virt_initfn,
+ .interfaces = (InterfaceInfo[]) {
+ { TYPE_HOTPLUG_HANDLER },
+ { }
+ },
};
-DEFINE_TYPES(virt_machine_types)
+static void machvirt_machine_init(void)
+{
+ type_register_static(&virt_machine_info);
+}
+
+type_init(machvirt_machine_init);
--
2.39.3
^ permalink raw reply related [flat|nested] 3+ messages in thread
* [RFC 2/2] hw/loongarch/virt: Define versioned virt machine
2025-11-12 9:25 [RFC 0/2] hw/loongarch/virt: Add versioned machine type support Bibo Mao
2025-11-12 9:25 ` [RFC 1/2] hw/loongarch/virt: Define virt machine type with type_init() Bibo Mao
@ 2025-11-12 9:25 ` Bibo Mao
1 sibling, 0 replies; 3+ messages in thread
From: Bibo Mao @ 2025-11-12 9:25 UTC (permalink / raw)
To: Song Gao; +Cc: Jiaxun Yang, qemu-devel
Add versioned virt machine started from QEMU 10.2
Signed-off-by: Bibo Mao <maobibo@loongson.cn>
---
hw/loongarch/virt.c | 37 +++++++++++++++++++++++++++++++++++++
1 file changed, 37 insertions(+)
diff --git a/hw/loongarch/virt.c b/hw/loongarch/virt.c
index ed406e3410..afe5d02470 100644
--- a/hw/loongarch/virt.c
+++ b/hw/loongarch/virt.c
@@ -1371,9 +1371,41 @@ static void virt_class_init(ObjectClass *oc, const void *data)
"The string may be up to 8 bytes in size");
}
+#define DEFINE_VIRT_MACHINE_VERSION(latest, ...) \
+ static void MACHINE_VER_SYM(class_init, virt, __VA_ARGS__)( \
+ ObjectClass *oc, \
+ const void *data) \
+ { \
+ MachineClass *mc = MACHINE_CLASS(oc); \
+ MACHINE_VER_SYM(options, virt, __VA_ARGS__)(mc); \
+ mc->desc = "QEMU " MACHINE_VER_STR(__VA_ARGS__) " LoongArch Virtual Machine"; \
+ MACHINE_VER_DEPRECATION(__VA_ARGS__); \
+ if (latest) { \
+ mc->alias = "virt"; \
+ } \
+ } \
+ static const TypeInfo MACHINE_VER_SYM(info, virt, __VA_ARGS__) = \
+ { \
+ .name = MACHINE_VER_TYPE_NAME("virt", __VA_ARGS__), \
+ .parent = TYPE_LOONGARCH_VIRT_MACHINE, \
+ .class_init = MACHINE_VER_SYM(class_init, virt, __VA_ARGS__), \
+ }; \
+ static void MACHINE_VER_SYM(register, virt, __VA_ARGS__)(void) \
+ { \
+ MACHINE_VER_DELETION(__VA_ARGS__); \
+ type_register_static(&MACHINE_VER_SYM(info, virt, __VA_ARGS__)); \
+ } \
+ type_init(MACHINE_VER_SYM(register, virt, __VA_ARGS__));
+
+#define DEFINE_VIRT_MACHINE_AS_LATEST(major, minor) \
+ DEFINE_VIRT_MACHINE_VERSION(true, major, minor)
+#define DEFINE_VIRT_MACHINE(major, minor) \
+ DEFINE_VIRT_MACHINE_VERSION(false, major, minor)
+
static const TypeInfo virt_machine_info = {
.name = TYPE_LOONGARCH_VIRT_MACHINE,
.parent = TYPE_MACHINE,
+ .abstract = true,
.instance_size = sizeof(LoongArchVirtMachineState),
.class_init = virt_class_init,
.instance_init = virt_initfn,
@@ -1389,3 +1421,8 @@ static void machvirt_machine_init(void)
}
type_init(machvirt_machine_init);
+
+static void virt_machine_10_2_options(MachineClass *mc)
+{
+}
+DEFINE_VIRT_MACHINE_AS_LATEST(10, 2)
--
2.39.3
^ permalink raw reply related [flat|nested] 3+ messages in thread
end of thread, other threads:[~2025-11-12 9:26 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-11-12 9:25 [RFC 0/2] hw/loongarch/virt: Add versioned machine type support Bibo Mao
2025-11-12 9:25 ` [RFC 1/2] hw/loongarch/virt: Define virt machine type with type_init() Bibo Mao
2025-11-12 9:25 ` [RFC 2/2] hw/loongarch/virt: Define versioned virt machine Bibo Mao
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).