[tip: x86/urgent] x86/resctrl: Fix SNC detection

tip-bot2 for Tony Luck posted 1 patch 3 months, 1 week ago
arch/x86/kernel/cpu/resctrl/monitor.c | 36 +++-----------------------
1 file changed, 5 insertions(+), 31 deletions(-)
[tip: x86/urgent] x86/resctrl: Fix SNC detection
Posted by tip-bot2 for Tony Luck 3 months, 1 week ago
The following commit has been merged into the x86/urgent branch of tip:

Commit-ID:     59674fc9d0bfd96ce8a776680ee1cf22c28c9ac7
Gitweb:        https://git.kernel.org/tip/59674fc9d0bfd96ce8a776680ee1cf22c28c9ac7
Author:        Tony Luck <tony.luck@intel.com>
AuthorDate:    Tue, 03 Mar 2026 11:55:44 +01:00
Committer:     Peter Zijlstra <peterz@infradead.org>
CommitterDate: Wed, 04 Mar 2026 16:35:09 +01:00

x86/resctrl: Fix SNC detection

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>
Reviewed-by: Ingo Molnar <mingo@kernel.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
Link: https://patch.msgid.link/20260303110100.367976706@infradead.org
---
 arch/x86/kernel/cpu/resctrl/monitor.c | 36 +++-----------------------
 1 file changed, 5 insertions(+), 31 deletions(-)

diff --git a/arch/x86/kernel/cpu/resctrl/monitor.c b/arch/x86/kernel/cpu/resctrl/monitor.c
index e6a1542..9bd87ba 100644
--- 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_resource *r, struct rdt_l3_mon_domain *d)
 		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_ids[] __initconst = {
 	{}
 };
 
-/*
- * 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;
-
-	if (!x86_match_cpu(snc_cpu_ids) || !ci)
-		return 1;
+	int ret = topology_num_nodes_per_package();
 
-	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)
+	if (ret > 1 && !x86_match_cpu(snc_cpu_ids)) {
+		pr_warn("CoD enabled system? Resctrl not supported\n");
 		return 1;
-
-	ret = cpus_per_l3 / cpus_per_node;
+	}
 
 	/* sanity check: Only valid results are 1, 2, 3, 4, 6 */
 	switch (ret) {
Re: [tip: x86/urgent] x86/resctrl: Fix SNC detection
Posted by Babu Moger 1 month, 1 week ago
Hi Tony,

On 3/4/26 09:46, tip-bot2 for Tony Luck wrote:
> The following commit has been merged into the x86/urgent branch of tip:
> 
> Commit-ID:     59674fc9d0bfd96ce8a776680ee1cf22c28c9ac7
> Gitweb:        https://git.kernel.org/tip/59674fc9d0bfd96ce8a776680ee1cf22c28c9ac7
> Author:        Tony Luck <tony.luck@intel.com>
> AuthorDate:    Tue, 03 Mar 2026 11:55:44 +01:00
> Committer:     Peter Zijlstra <peterz@infradead.org>
> CommitterDate: Wed, 04 Mar 2026 16:35:09 +01:00
> 
> x86/resctrl: Fix SNC detection
> 
> 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>
> Reviewed-by: Ingo Molnar <mingo@kernel.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
> Link: https://patch.msgid.link/20260303110100.367976706@infradead.org
> ---
>   arch/x86/kernel/cpu/resctrl/monitor.c | 36 +++-----------------------
>   1 file changed, 5 insertions(+), 31 deletions(-)
> 
> diff --git a/arch/x86/kernel/cpu/resctrl/monitor.c b/arch/x86/kernel/cpu/resctrl/monitor.c
> index e6a1542..9bd87ba 100644
> --- 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_resource *r, struct rdt_l3_mon_domain *d)
>   		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_ids[] __initconst = {
>   	{}
>   };
>   
> -/*
> - * 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;
> -
> -	if (!x86_match_cpu(snc_cpu_ids) || !ci)
> -		return 1;
> +	int ret = topology_num_nodes_per_package();
>   
> -	cpus_read_lock();
> -	if (num_online_cpus() != num_present_cpus())
> -		pr_warn("Some CPUs offline, SNC detection may be incorrect\n");
> -	cpus_read_unlock();

Saw these messages on AMD system(7.1.0-rc1).

sudo dmesg |grep CoD
[    6.614667] resctrl: CoD enabled system? Resctrl not supported


Might confuse some users. Not a big deal. But we should fix it in next 
version.

Thanks
Babu
Re: [tip: x86/urgent] x86/resctrl: Fix SNC detection
Posted by Luck, Tony 1 month, 1 week ago
On Tue, Apr 28, 2026 at 03:41:51PM -0500, Babu Moger wrote:
> Hi Tony,
 ...
> Saw these messages on AMD system(7.1.0-rc1).
> 
> sudo dmesg |grep CoD
> [    6.614667] resctrl: CoD enabled system? Resctrl not supported
> 
> 
> Might confuse some users. Not a big deal. But we should fix it in next
> version.

Babu,

Indeed yes. Thanks for letting me know.

I think this should fix it. Can you test please?

-Tony

---

diff --git a/arch/x86/kernel/cpu/resctrl/monitor.c b/arch/x86/kernel/cpu/resctrl/monitor.c
index 497cc57ac135..3d72ff5d0c25 100644
--- a/arch/x86/kernel/cpu/resctrl/monitor.c
+++ b/arch/x86/kernel/cpu/resctrl/monitor.c
@@ -374,7 +374,12 @@ static const struct x86_cpu_id snc_cpu_ids[] __initconst = {
 
 static __init int snc_get_config(void)
 {
-	int ret = topology_num_nodes_per_package();
+	int ret;
+
+	if (boot_cpu_data.x86_vendor != X86_VENDOR_INTEL)
+		return 1;
+
+	ret = topology_num_nodes_per_package();
 
 	if (ret > 1 && !x86_match_cpu(snc_cpu_ids)) {
 		pr_warn("CoD enabled system? Resctrl not supported\n");
>
Re: [tip: x86/urgent] x86/resctrl: Fix SNC detection
Posted by Moger, Babu 1 month, 1 week ago
Hi Tony,

On 4/28/2026 3:52 PM, Luck, Tony wrote:
> On Tue, Apr 28, 2026 at 03:41:51PM -0500, Babu Moger wrote:
>> Hi Tony,
>   ...
>> Saw these messages on AMD system(7.1.0-rc1).
>>
>> sudo dmesg |grep CoD
>> [    6.614667] resctrl: CoD enabled system? Resctrl not supported
>>
>>
>> Might confuse some users. Not a big deal. But we should fix it in next
>> version.
> 
> Babu,
> 
> Indeed yes. Thanks for letting me know.
> 
> I think this should fix it. Can you test please?
> 
> -Tony
> 
> ---
> 
> diff --git a/arch/x86/kernel/cpu/resctrl/monitor.c b/arch/x86/kernel/cpu/resctrl/monitor.c
> index 497cc57ac135..3d72ff5d0c25 100644
> --- a/arch/x86/kernel/cpu/resctrl/monitor.c
> +++ b/arch/x86/kernel/cpu/resctrl/monitor.c
> @@ -374,7 +374,12 @@ static const struct x86_cpu_id snc_cpu_ids[] __initconst = {
>   
>   static __init int snc_get_config(void)
>   {
> -	int ret = topology_num_nodes_per_package();
> +	int ret;
> +
> +	if (boot_cpu_data.x86_vendor != X86_VENDOR_INTEL)
> +		return 1;
> +
> +	ret = topology_num_nodes_per_package();
>   
>   	if (ret > 1 && !x86_match_cpu(snc_cpu_ids)) {
>   		pr_warn("CoD enabled system? Resctrl not supported\n");
>>
> 

Yes. it fixes it. Thanks

Babu