@@ -430,14 +430,20 @@ static void fdt_add_cpu_nodes(const VirtMachineState *vms)
if (ms->smp.threads > 1) {
map_path = g_strdup_printf(
- "/cpus/cpu-map/%s%d/%s%d/%s%d",
- "socket", cpu / (ms->smp.cores * ms->smp.threads),
+ "/cpus/cpu-map/%s%d/%s%d/%s%d/%s%d",
+ "socket",
+ cpu / (ms->smp.clusters * ms->smp.cores *
+ ms->smp.threads),
+ "cluster",
+ (cpu / (ms->smp.cores * ms->smp.threads)) %
+ ms->smp.clusters,
"core", (cpu / ms->smp.threads) % ms->smp.cores,
"thread", cpu % ms->smp.threads);
} else {
map_path = g_strdup_printf(
- "/cpus/cpu-map/%s%d/%s%d",
- "socket", cpu / ms->smp.cores,
+ "/cpus/cpu-map/%s%d/%s%d/%s%d",
+ "socket", cpu / (ms->smp.clusters * ms->smp.cores),
+ "cluster", (cpu / ms->smp.cores) % ms->smp.clusters,
"core", cpu % ms->smp.cores);
}
qemu_fdt_add_path(vms->fdt, map_path);
Add a cluster level between core level and package level for ARM device tree. Signed-off-by: Yanan Wang <wangyanan55@huawei.com> --- hw/arm/virt.c | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-)