58 lines
2.5 KiB
Diff
58 lines
2.5 KiB
Diff
|
|
From 38d9ae59b9344f13198e6b4de03b04787bd6b89d Mon Sep 17 00:00:00 2001
|
||
|
|
From: Yanan Wang <wangyanan55@huawei.com>
|
||
|
|
Date: Fri, 7 Jan 2022 16:32:28 +0800
|
||
|
|
Subject: [PATCH 16/24] hw/arm/virt: Support cluster level in DT cpu-map
|
||
|
|
|
||
|
|
Support one cluster level between core and physical package in the
|
||
|
|
cpu-map of Arm/virt devicetree. This is also consistent with Linux
|
||
|
|
Doc "Documentation/devicetree/bindings/cpu/cpu-topology.txt".
|
||
|
|
|
||
|
|
Signed-off-by: Yanan Wang <wangyanan55@huawei.com>
|
||
|
|
Reviewed-by: Andrew Jones <drjones@redhat.com>
|
||
|
|
Message-id: 20220107083232.16256-3-wangyanan55@huawei.com
|
||
|
|
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
|
||
|
|
---
|
||
|
|
hw/arm/virt.c | 15 ++++++++-------
|
||
|
|
1 file changed, 8 insertions(+), 7 deletions(-)
|
||
|
|
|
||
|
|
diff --git a/hw/arm/virt.c b/hw/arm/virt.c
|
||
|
|
index 6ca9cbe2cf..ddcb73f714 100644
|
||
|
|
--- a/hw/arm/virt.c
|
||
|
|
+++ b/hw/arm/virt.c
|
||
|
|
@@ -434,9 +434,8 @@ static void fdt_add_cpu_nodes(const VirtMachineState *vms)
|
||
|
|
* can contain several layers of clustering within a single physical
|
||
|
|
* package and cluster nodes can be contained in parent cluster nodes.
|
||
|
|
*
|
||
|
|
- * Given that cluster is not yet supported in the vCPU topology,
|
||
|
|
- * we currently generate one cluster node within each socket node
|
||
|
|
- * by default.
|
||
|
|
+ * Note: currently we only support one layer of clustering within
|
||
|
|
+ * each physical package.
|
||
|
|
*/
|
||
|
|
qemu_fdt_add_subnode(ms->fdt, "/cpus/cpu-map");
|
||
|
|
|
||
|
|
@@ -446,14 +445,16 @@ static void fdt_add_cpu_nodes(const VirtMachineState *vms)
|
||
|
|
|
||
|
|
if (ms->smp.threads > 1) {
|
||
|
|
map_path = g_strdup_printf(
|
||
|
|
- "/cpus/cpu-map/socket%d/cluster0/core%d/thread%d",
|
||
|
|
- cpu / (ms->smp.cores * ms->smp.threads),
|
||
|
|
+ "/cpus/cpu-map/socket%d/cluster%d/core%d/thread%d",
|
||
|
|
+ cpu / (ms->smp.clusters * ms->smp.cores * ms->smp.threads),
|
||
|
|
+ (cpu / (ms->smp.cores * ms->smp.threads)) % ms->smp.clusters,
|
||
|
|
(cpu / ms->smp.threads) % ms->smp.cores,
|
||
|
|
cpu % ms->smp.threads);
|
||
|
|
} else {
|
||
|
|
map_path = g_strdup_printf(
|
||
|
|
- "/cpus/cpu-map/socket%d/cluster0/core%d",
|
||
|
|
- cpu / ms->smp.cores,
|
||
|
|
+ "/cpus/cpu-map/socket%d/cluster%d/core%d",
|
||
|
|
+ cpu / (ms->smp.clusters * ms->smp.cores),
|
||
|
|
+ (cpu / ms->smp.cores) % ms->smp.clusters,
|
||
|
|
cpu % ms->smp.cores);
|
||
|
|
}
|
||
|
|
qemu_fdt_add_path(ms->fdt, map_path);
|
||
|
|
--
|
||
|
|
2.27.0
|
||
|
|
|