All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] x86/cacheinfo: Don't use cpu_llc_shared_map for !CONFIG_SMP
@ 2022-08-10 16:15 Saurabh Sengar
  2022-08-12 14:56 ` Michael Kelley (LINUX)
                   ` (2 more replies)
  0 siblings, 3 replies; 10+ messages in thread
From: Saurabh Sengar @ 2022-08-10 16:15 UTC (permalink / raw)
  To: ssengar, mikelley, tglx, mingo, bp, dave.hansen, x86, hpa, peterz,
	tim.c.chen, will, song.bao.hua, suravee.suthikulpanit,
	linux-kernel

cpu_llc_shared_map is always declared and defined, but populated in
arch/x86/kernel/smpboot.c which only builds for CONFIG_SMP=y. For
UniProcessor builds this mask is never populated and hence invalid.
Current code doesn't handle the case of AMD UniProcessor correctly,
which results "shared_cpu_map" and "shared_cpu_list" files missing from
sysfs entries for l3 cache. This patch fixes this issue.
This code used to work because of a another bug in 'cpumask_next',
where in the CONFIG_SMP=n case the cpumask_next() ignores empty mask
that results as if CPU 0 was set. This bug in 'cpumask_next' was fixed by
following commit, which exposes the cpu_llc_shared_map bug.

b81dce77ced ("cpumask: Fix invalid uniprocessor mask assumption")

Fixes: 2b83809a5e ("x86/cpu/amd: Derive L3 shared_cpu_map from cpu_llc_shared_mask")
Signed-off-by: Saurabh Sengar <ssengar@linux.microsoft.com>
---
 arch/x86/kernel/cpu/cacheinfo.c | 14 ++++++++++++--
 1 file changed, 12 insertions(+), 2 deletions(-)

diff --git a/arch/x86/kernel/cpu/cacheinfo.c b/arch/x86/kernel/cpu/cacheinfo.c
index 66556833d7af..8753bf33fec4 100644
--- a/arch/x86/kernel/cpu/cacheinfo.c
+++ b/arch/x86/kernel/cpu/cacheinfo.c
@@ -889,10 +889,12 @@ static int __cache_amd_cpumap_setup(unsigned int cpu, int index,
 	int i, sibling;
 
 	/*
-	 * For L3, always use the pre-calculated cpu_llc_shared_mask
-	 * to derive shared_cpu_map.
+	 * For L3, in case of SMP systems use the pre-calculated
+	 * cpu_llc_shared_mask to derive shared_cpu_map. In case
+	 * of UP simply set the only cpu in mask.
 	 */
 	if (index == 3) {
+#ifdef CONFIG_SMP
 		for_each_cpu(i, cpu_llc_shared_mask(cpu)) {
 			this_cpu_ci = get_cpu_cacheinfo(i);
 			if (!this_cpu_ci->info_list)
@@ -905,6 +907,14 @@ static int __cache_amd_cpumap_setup(unsigned int cpu, int index,
 						&this_leaf->shared_cpu_map);
 			}
 		}
+#else
+		this_cpu_ci = get_cpu_cacheinfo(cpu);
+		WARN_ON(!this_cpu_ci->info_list);
+		if (!this_cpu_ci->info_list)
+			return 0;
+		this_leaf = this_cpu_ci->info_list + index;
+		cpumask_set_cpu(cpu, &this_leaf->shared_cpu_map);
+#endif
 	} else if (boot_cpu_has(X86_FEATURE_TOPOEXT)) {
 		unsigned int apicid, nshared, first, last;
 
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 10+ messages in thread

end of thread, other threads:[~2022-09-29  9:04 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2022-08-10 16:15 [PATCH] x86/cacheinfo: Don't use cpu_llc_shared_map for !CONFIG_SMP Saurabh Sengar
2022-08-12 14:56 ` Michael Kelley (LINUX)
2022-08-17 19:40 ` Borislav Petkov
2022-08-18  4:52   ` Saurabh Singh Sengar
2022-08-18 11:57     ` Borislav Petkov
2022-08-18 12:29       ` Saurabh Singh Sengar
2022-08-19 17:16         ` Borislav Petkov
2022-08-19 17:46           ` Saurabh Singh Sengar
2022-08-20  8:39             ` [PATCH] x86/cacheinfo: Add a cpu_llc_shared_mask() UP variant Borislav Petkov
2022-09-29  9:04 ` [tip: x86/urgent] " tip-bot2 for Borislav Petkov

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.