diff options
author | Huacai Chen <chenhuacai@loongson.cn> | 2025-01-25 18:51:33 +0800 |
---|---|---|
committer | Huacai Chen <chenhuacai@loongson.cn> | 2025-01-25 18:51:33 +0800 |
commit | b62a03049f141061d0397bfa86b74f65985d9338 (patch) | |
tree | b2b6811b70ca4ee66f08ed9b44926ce88f7052ac | |
parent | 98e720f77dba6bb702a57f3d8479e6445e34f38c (diff) |
LoongArch: Correct the cacheinfo sharing information
SMT cores and their sibling cores share the same L1 and L2 private
caches (of course last level cache is also shared), so correct the
cacheinfo sharing information to let shared_cpu_map correctly reflect
this relationship.
Below is the output of "lscpu" on Loongson-3A6000 (4 cores, 8 threads).
1. Before patch:
L1d: 512 KiB (8 instances)
L1i: 512 KiB (8 instances)
L2: 2 MiB (8 instances)
L3: 16 MiB (1 instance)
2. After patch:
L1d: 256 KiB (4 instances)
L1i: 256 KiB (4 instances)
L2: 1 MiB (4 instances)
L3: 16 MiB (1 instance)
Reported-by: Chao Li <lichao@loongson.cn>
Signed-off-by: Juxin Gao <gaojuxin@loongson.cn>
Signed-off-by: Huacai Chen <chenhuacai@loongson.cn>
-rw-r--r-- | arch/loongarch/kernel/cacheinfo.c | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/arch/loongarch/kernel/cacheinfo.c b/arch/loongarch/kernel/cacheinfo.c index c7988f757281..8e231b0d2cd6 100644 --- a/arch/loongarch/kernel/cacheinfo.c +++ b/arch/loongarch/kernel/cacheinfo.c @@ -51,6 +51,12 @@ static void cache_cpumap_setup(unsigned int cpu) continue; sib_leaf = sib_cpu_ci->info_list + index; + /* SMT cores share all caches */ + if (cpus_are_siblings(i, cpu)) { + cpumask_set_cpu(cpu, &sib_leaf->shared_cpu_map); + cpumask_set_cpu(i, &this_leaf->shared_cpu_map); + } + /* Node's cores share shared caches */ if (cache_leaves_are_shared(this_leaf, sib_leaf)) { cpumask_set_cpu(cpu, &sib_leaf->shared_cpu_map); cpumask_set_cpu(i, &this_leaf->shared_cpu_map); |