From: Zhao Liu <zhao1.liu@intel.com>
For QOM topology, CPU should be inserted under its parent core.
Extend x86_cpu_new() to allow caller to specify topology parent.
Signed-off-by: Zhao Liu <zhao1.liu@intel.com>
---
hw/i386/x86.c | 16 ++++++++++++----
1 file changed, 12 insertions(+), 4 deletions(-)
diff --git a/hw/i386/x86.c b/hw/i386/x86.c
index d9293846db64..3c99f4c3ab51 100644
--- a/hw/i386/x86.c
+++ b/hw/i386/x86.c
@@ -94,15 +94,22 @@ uint32_t x86_cpu_apic_id_from_index(X86MachineState *x86ms,
return x86_apicid_from_cpu_idx(&topo_info, cpu_index);
}
-
static void x86_cpu_new(X86MachineState *x86ms, int64_t apic_id,
- Error **errp)
+ Object *parent, int index, Error **errp)
{
- Object *cpu = object_new(MACHINE(x86ms)->cpu_type);
+ const char *cpu_type = MACHINE(x86ms)->cpu_type;
+ Object *cpu = object_new(cpu_type);
if (!object_property_set_uint(cpu, "apic-id", apic_id, errp)) {
goto out;
}
+
+ if (parent) {
+ char *name = g_strdup_printf("%s[%d]", cpu_type, index);
+ object_property_add_child(parent, name, cpu);
+ g_free(name);
+ }
+
qdev_realize(DEVICE(cpu), NULL, errp);
out:
@@ -146,7 +153,8 @@ void x86_cpus_init(X86MachineState *x86ms, int default_cpu_version)
possible_cpus = mc->possible_cpu_arch_ids(ms);
for (i = 0; i < ms->smp.cpus; i++) {
- x86_cpu_new(x86ms, possible_cpus->cpus[i].arch_id, &error_fatal);
+ x86_cpu_new(x86ms, possible_cpus->cpus[i].arch_id,
+ NULL, i, &error_fatal);
}
}
--
2.34.1