All of lore.kernel.org
 help / color / mirror / Atom feed
From: Peter Zijlstra <peterz@infradead.org>
To: x86@kernel.org, tglx@kernel.org
Cc: linux-kernel@vger.kernel.org, peterz@infradead.org,
	tim.c.chen@linux.intel.com, yu.c.chen@intel.com,
	kyle.meyer@hpe.com, vinicius.gomes@intel.com, brgerst@gmail.com,
	hpa@zytor.com, kprateek.nayak@amd.com,
	patryk.wlazlyn@linux.intel.com, rafael.j.wysocki@intel.com,
	russ.anderson@hpe.com, zhao1.liu@intel.com, tony.luck@intel.com,
	Zhang Rui <rui.zhang@intel.com>
Subject: [PATCH v2 5/5] x86/resctrl: Fix SNC detection
Date: Tue, 03 Mar 2026 11:55:44 +0100	[thread overview]
Message-ID: <20260303110100.367976706@infradead.org> (raw)
In-Reply-To: 20260303105539.428037056@infradead.org

From: Tony Luck <tony.luck@intel.com>

Now that the x86 topology code has a sensible nodes-per-package
measure, that does not depend on the online status of CPUs, use this
to divinate the SNC mode.

Note that when Cluster on Die (CoD) is configured on older systems this
will also show multiple NUMA nodes per package. Intel Resource Director
Technology is incomaptible with CoD. Print a warning and do not use the
fixup MSR_RMID_SNC_CONFIG.

Signed-off-by: Tony Luck <tony.luck@intel.com>
Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Tested-by: Zhang Rui <rui.zhang@intel.com>
Tested-by: Chen Yu <yu.c.chen@intel.com>
Link: https://patch.msgid.link/aaCxbbgjL6OZ6VMd@agluck-desk3
---
 arch/x86/kernel/cpu/resctrl/monitor.c |   36 ++++------------------------------
 1 file changed, 5 insertions(+), 31 deletions(-)

--- a/arch/x86/kernel/cpu/resctrl/monitor.c
+++ b/arch/x86/kernel/cpu/resctrl/monitor.c
@@ -364,7 +364,7 @@ void arch_mon_domain_online(struct rdt_r
 		msr_clear_bit(MSR_RMID_SNC_CONFIG, 0);
 }
 
-/* CPU models that support MSR_RMID_SNC_CONFIG */
+/* CPU models that support SNC and MSR_RMID_SNC_CONFIG */
 static const struct x86_cpu_id snc_cpu_ids[] __initconst = {
 	X86_MATCH_VFM(INTEL_ICELAKE_X, 0),
 	X86_MATCH_VFM(INTEL_SAPPHIRERAPIDS_X, 0),
@@ -375,40 +375,14 @@ static const struct x86_cpu_id snc_cpu_i
 	{}
 };
 
-/*
- * There isn't a simple hardware bit that indicates whether a CPU is running
- * in Sub-NUMA Cluster (SNC) mode. Infer the state by comparing the
- * number of CPUs sharing the L3 cache with CPU0 to the number of CPUs in
- * the same NUMA node as CPU0.
- * It is not possible to accurately determine SNC state if the system is
- * booted with a maxcpus=N parameter. That distorts the ratio of SNC nodes
- * to L3 caches. It will be OK if system is booted with hyperthreading
- * disabled (since this doesn't affect the ratio).
- */
 static __init int snc_get_config(void)
 {
-	struct cacheinfo *ci = get_cpu_cacheinfo_level(0, RESCTRL_L3_CACHE);
-	const cpumask_t *node0_cpumask;
-	int cpus_per_node, cpus_per_l3;
-	int ret;
+	int ret = topology_num_nodes_per_package();
 
-	if (!x86_match_cpu(snc_cpu_ids) || !ci)
+	if (ret > 1 && !x86_match_cpu(snc_cpu_ids)) {
+		pr_warn("CoD enabled system? Resctrl not supported\n");
 		return 1;
-
-	cpus_read_lock();
-	if (num_online_cpus() != num_present_cpus())
-		pr_warn("Some CPUs offline, SNC detection may be incorrect\n");
-	cpus_read_unlock();
-
-	node0_cpumask = cpumask_of_node(cpu_to_node(0));
-
-	cpus_per_node = cpumask_weight(node0_cpumask);
-	cpus_per_l3 = cpumask_weight(&ci->shared_cpu_map);
-
-	if (!cpus_per_node || !cpus_per_l3)
-		return 1;
-
-	ret = cpus_per_l3 / cpus_per_node;
+	}
 
 	/* sanity check: Only valid results are 1, 2, 3, 4, 6 */
 	switch (ret) {



  parent reply	other threads:[~2026-03-03 11:05 UTC|newest]

Thread overview: 17+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-03-03 10:55 [PATCH v2 0/5] x86/topo: SNC Divination Peter Zijlstra
2026-03-03 10:55 ` [PATCH v2 1/5] x86/numa: Store extra copy of numa_nodes_parsed Peter Zijlstra
2026-03-04 15:46   ` [tip: x86/urgent] " tip-bot2 for Peter Zijlstra
2026-03-03 10:55 ` [PATCH v2 2/5] x86/topo: Add topology_num_nodes_per_package() Peter Zijlstra
2026-03-04 15:46   ` [tip: x86/urgent] " tip-bot2 for Peter Zijlstra
2026-03-03 10:55 ` [PATCH v2 3/5] x86/topo: Replace x86_has_numa_in_package Peter Zijlstra
2026-03-04 15:46   ` [tip: x86/urgent] " tip-bot2 for Peter Zijlstra
2026-03-03 10:55 ` [PATCH v2 4/5] x86/topo: Fix SNC topology mess Peter Zijlstra
2026-03-03 11:59   ` Ingo Molnar
2026-03-03 14:45     ` Peter Zijlstra
2026-03-04 15:46   ` [tip: x86/urgent] " tip-bot2 for Peter Zijlstra
2026-03-03 10:55 ` Peter Zijlstra [this message]
2026-03-04 15:46   ` [tip: x86/urgent] x86/resctrl: Fix SNC detection tip-bot2 for Tony Luck
2026-04-28 20:41     ` Babu Moger
2026-04-28 20:52       ` Luck, Tony
2026-04-28 23:09         ` Moger, Babu
2026-03-03 12:01 ` [PATCH v2 0/5] x86/topo: SNC Divination Ingo Molnar

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20260303110100.367976706@infradead.org \
    --to=peterz@infradead.org \
    --cc=brgerst@gmail.com \
    --cc=hpa@zytor.com \
    --cc=kprateek.nayak@amd.com \
    --cc=kyle.meyer@hpe.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=patryk.wlazlyn@linux.intel.com \
    --cc=rafael.j.wysocki@intel.com \
    --cc=rui.zhang@intel.com \
    --cc=russ.anderson@hpe.com \
    --cc=tglx@kernel.org \
    --cc=tim.c.chen@linux.intel.com \
    --cc=tony.luck@intel.com \
    --cc=vinicius.gomes@intel.com \
    --cc=x86@kernel.org \
    --cc=yu.c.chen@intel.com \
    --cc=zhao1.liu@intel.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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.