* [PATCH v5 1/4] selftests/resctrl: Fix a division by zero error on Hygon
2025-12-17 3:04 [PATCH v5 0/4] selftests/resctrl: Add Hygon CPUs support and bug fixes Xiaochen Shen
@ 2025-12-17 3:04 ` Xiaochen Shen
2025-12-17 3:04 ` [PATCH v5 2/4] selftests/resctrl: Define CPU vendor IDs as bits to match usage Xiaochen Shen
` (3 subsequent siblings)
4 siblings, 0 replies; 9+ messages in thread
From: Xiaochen Shen @ 2025-12-17 3:04 UTC (permalink / raw)
To: tony.luck, reinette.chatre, bp, fenghuay, shuah, skhan
Cc: babu.moger, james.morse, Dave.Martin, x86, linux-kernel,
linux-kselftest, shenxiaochen
Commit
a1cd99e700ec ("selftests/resctrl: Adjust effective L3 cache size with SNC enabled")
introduced the snc_nodes_per_l3_cache() function to detect the Intel
Sub-NUMA Clustering (SNC) feature by comparing #CPUs in node0 with #CPUs
sharing LLC with CPU0. The function was designed to return:
(1) >1: SNC mode is enabled.
(2) 1: SNC mode is not enabled or not supported.
However, on certain Hygon CPUs, #CPUs sharing LLC with CPU0 is actually
less than #CPUs in node0. This results in snc_nodes_per_l3_cache()
returning 0 (calculated as cache_cpus / node_cpus).
This leads to a division by zero error in get_cache_size():
*cache_size /= snc_nodes_per_l3_cache();
Causing the resctrl selftest to fail with:
"Floating point exception (core dumped)"
Fix the issue by ensuring snc_nodes_per_l3_cache() returns 1 when SNC
mode is not supported on the platform.
Fixes: a1cd99e700ec ("selftests/resctrl: Adjust effective L3 cache size with SNC enabled")
Signed-off-by: Xiaochen Shen <shenxiaochen@open-hieco.net>
Reviewed-by: Reinette Chatre <reinette.chatre@intel.com>
Reviewed-by: Fenghua Yu <fenghuay@nvidia.com>
---
tools/testing/selftests/resctrl/resctrlfs.c | 10 ++++++++++
1 file changed, 10 insertions(+)
diff --git a/tools/testing/selftests/resctrl/resctrlfs.c b/tools/testing/selftests/resctrl/resctrlfs.c
index 195f04c4d158..b9c1bfb6cc02 100644
--- a/tools/testing/selftests/resctrl/resctrlfs.c
+++ b/tools/testing/selftests/resctrl/resctrlfs.c
@@ -243,6 +243,16 @@ int snc_nodes_per_l3_cache(void)
}
snc_mode = cache_cpus / node_cpus;
+ /*
+ * On some platforms (e.g. Hygon),
+ * cache_cpus < node_cpus, the calculated snc_mode is 0.
+ *
+ * Set snc_mode = 1 to indicate that SNC mode is not
+ * supported on the platform.
+ */
+ if (!snc_mode)
+ snc_mode = 1;
+
if (snc_mode > 1)
ksft_print_msg("SNC-%d mode discovered.\n", snc_mode);
}
--
2.47.3
^ permalink raw reply related [flat|nested] 9+ messages in thread* [PATCH v5 2/4] selftests/resctrl: Define CPU vendor IDs as bits to match usage
2025-12-17 3:04 [PATCH v5 0/4] selftests/resctrl: Add Hygon CPUs support and bug fixes Xiaochen Shen
2025-12-17 3:04 ` [PATCH v5 1/4] selftests/resctrl: Fix a division by zero error on Hygon Xiaochen Shen
@ 2025-12-17 3:04 ` Xiaochen Shen
2025-12-17 3:04 ` [PATCH v5 3/4] selftests/resctrl: Add CPU vendor detection for Hygon Xiaochen Shen
` (2 subsequent siblings)
4 siblings, 0 replies; 9+ messages in thread
From: Xiaochen Shen @ 2025-12-17 3:04 UTC (permalink / raw)
To: tony.luck, reinette.chatre, bp, fenghuay, shuah, skhan
Cc: babu.moger, james.morse, Dave.Martin, x86, linux-kernel,
linux-kselftest, shenxiaochen
The CPU vendor IDs are required to be unique bits because they're used
for vendor_specific bitmask in the struct resctrl_test.
Consider for example their usage in test_vendor_specific_check():
return get_vendor() & test->vendor_specific
However, the definitions of CPU vendor IDs in file resctrl.h is quite
subtle as a bitmask value:
#define ARCH_INTEL 1
#define ARCH_AMD 2
A clearer and more maintainable approach is to define these CPU vendor
IDs using BIT(). This ensures each vendor corresponds to a distinct bit
and makes it obvious when adding new vendor IDs.
Accordingly, update the return types of detect_vendor() and get_vendor()
from 'int' to 'unsigned int' to align with their usage as bitmask values
and to prevent potentially risky type conversions.
Furthermore, introduce a bool flag 'initialized' to simplify the
get_vendor() -> detect_vendor() logic. This ensures the vendor ID is
detected only once and resolves the ambiguity of using the same variable
'vendor' both as a value and as a state.
Suggested-by: Reinette Chatre <reinette.chatre@intel.com>
Suggested-by: Fenghua Yu <fenghuay@nvidia.com>
Signed-off-by: Xiaochen Shen <shenxiaochen@open-hieco.net>
Reviewed-by: Reinette Chatre <reinette.chatre@intel.com>
---
tools/testing/selftests/resctrl/resctrl.h | 7 ++---
.../testing/selftests/resctrl/resctrl_tests.c | 26 +++++++++++++------
2 files changed, 22 insertions(+), 11 deletions(-)
diff --git a/tools/testing/selftests/resctrl/resctrl.h b/tools/testing/selftests/resctrl/resctrl.h
index 3c51bdac2dfa..4f9c7d04c98d 100644
--- a/tools/testing/selftests/resctrl/resctrl.h
+++ b/tools/testing/selftests/resctrl/resctrl.h
@@ -23,6 +23,7 @@
#include <asm/unistd.h>
#include <linux/perf_event.h>
#include <linux/compiler.h>
+#include <linux/bits.h>
#include "kselftest.h"
#define MB (1024 * 1024)
@@ -36,8 +37,8 @@
* Define as bits because they're used for vendor_specific bitmask in
* the struct resctrl_test.
*/
-#define ARCH_INTEL 1
-#define ARCH_AMD 2
+#define ARCH_INTEL BIT(0)
+#define ARCH_AMD BIT(1)
#define END_OF_TESTS 1
@@ -163,7 +164,7 @@ extern int snc_unreliable;
extern char llc_occup_path[1024];
int snc_nodes_per_l3_cache(void);
-int get_vendor(void);
+unsigned int get_vendor(void);
bool check_resctrlfs_support(void);
int filter_dmesg(void);
int get_domain_id(const char *resource, int cpu_no, int *domain_id);
diff --git a/tools/testing/selftests/resctrl/resctrl_tests.c b/tools/testing/selftests/resctrl/resctrl_tests.c
index 5154ffd821c4..42605e2a3b66 100644
--- a/tools/testing/selftests/resctrl/resctrl_tests.c
+++ b/tools/testing/selftests/resctrl/resctrl_tests.c
@@ -23,16 +23,24 @@ static struct resctrl_test *resctrl_tests[] = {
&l2_noncont_cat_test,
};
-static int detect_vendor(void)
+static unsigned int detect_vendor(void)
{
- FILE *inf = fopen("/proc/cpuinfo", "r");
- int vendor_id = 0;
+ static unsigned int vendor_id;
+ static bool initialized;
char *s = NULL;
+ FILE *inf;
char *res;
- if (!inf)
+ if (initialized)
return vendor_id;
+ inf = fopen("/proc/cpuinfo", "r");
+ if (!inf) {
+ vendor_id = 0;
+ initialized = true;
+ return vendor_id;
+ }
+
res = fgrep(inf, "vendor_id");
if (res)
@@ -45,15 +53,17 @@ static int detect_vendor(void)
fclose(inf);
free(res);
+
+ initialized = true;
return vendor_id;
}
-int get_vendor(void)
+unsigned int get_vendor(void)
{
- static int vendor = -1;
+ unsigned int vendor;
+
+ vendor = detect_vendor();
- if (vendor == -1)
- vendor = detect_vendor();
if (vendor == 0)
ksft_print_msg("Can not get vendor info...\n");
--
2.47.3
^ permalink raw reply related [flat|nested] 9+ messages in thread* [PATCH v5 3/4] selftests/resctrl: Add CPU vendor detection for Hygon
2025-12-17 3:04 [PATCH v5 0/4] selftests/resctrl: Add Hygon CPUs support and bug fixes Xiaochen Shen
2025-12-17 3:04 ` [PATCH v5 1/4] selftests/resctrl: Fix a division by zero error on Hygon Xiaochen Shen
2025-12-17 3:04 ` [PATCH v5 2/4] selftests/resctrl: Define CPU vendor IDs as bits to match usage Xiaochen Shen
@ 2025-12-17 3:04 ` Xiaochen Shen
2025-12-17 3:04 ` [PATCH v5 4/4] selftests/resctrl: Fix non-contiguous CBM check " Xiaochen Shen
2026-01-08 16:02 ` [PATCH v5 0/4] selftests/resctrl: Add Hygon CPUs support and bug fixes Reinette Chatre
4 siblings, 0 replies; 9+ messages in thread
From: Xiaochen Shen @ 2025-12-17 3:04 UTC (permalink / raw)
To: tony.luck, reinette.chatre, bp, fenghuay, shuah, skhan
Cc: babu.moger, james.morse, Dave.Martin, x86, linux-kernel,
linux-kselftest, shenxiaochen
The resctrl selftest currently fails on Hygon CPUs that support Platform
QoS features, printing the error:
"# Can not get vendor info..."
This occurs because vendor detection is missing for Hygon CPUs.
Fix this by extending the CPU vendor detection logic to include
Hygon's vendor ID.
Signed-off-by: Xiaochen Shen <shenxiaochen@open-hieco.net>
Reviewed-by: Reinette Chatre <reinette.chatre@intel.com>
---
tools/testing/selftests/resctrl/resctrl.h | 1 +
tools/testing/selftests/resctrl/resctrl_tests.c | 2 ++
2 files changed, 3 insertions(+)
diff --git a/tools/testing/selftests/resctrl/resctrl.h b/tools/testing/selftests/resctrl/resctrl.h
index 4f9c7d04c98d..afe635b6e48d 100644
--- a/tools/testing/selftests/resctrl/resctrl.h
+++ b/tools/testing/selftests/resctrl/resctrl.h
@@ -39,6 +39,7 @@
*/
#define ARCH_INTEL BIT(0)
#define ARCH_AMD BIT(1)
+#define ARCH_HYGON BIT(2)
#define END_OF_TESTS 1
diff --git a/tools/testing/selftests/resctrl/resctrl_tests.c b/tools/testing/selftests/resctrl/resctrl_tests.c
index 42605e2a3b66..dbcd5eea9fbc 100644
--- a/tools/testing/selftests/resctrl/resctrl_tests.c
+++ b/tools/testing/selftests/resctrl/resctrl_tests.c
@@ -50,6 +50,8 @@ static unsigned int detect_vendor(void)
vendor_id = ARCH_INTEL;
else if (s && !strcmp(s, ": AuthenticAMD\n"))
vendor_id = ARCH_AMD;
+ else if (s && !strcmp(s, ": HygonGenuine\n"))
+ vendor_id = ARCH_HYGON;
fclose(inf);
free(res);
--
2.47.3
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [PATCH v5 4/4] selftests/resctrl: Fix non-contiguous CBM check for Hygon
2025-12-17 3:04 [PATCH v5 0/4] selftests/resctrl: Add Hygon CPUs support and bug fixes Xiaochen Shen
` (2 preceding siblings ...)
2025-12-17 3:04 ` [PATCH v5 3/4] selftests/resctrl: Add CPU vendor detection for Hygon Xiaochen Shen
@ 2025-12-17 3:04 ` Xiaochen Shen
2026-01-08 16:02 ` [PATCH v5 0/4] selftests/resctrl: Add Hygon CPUs support and bug fixes Reinette Chatre
4 siblings, 0 replies; 9+ messages in thread
From: Xiaochen Shen @ 2025-12-17 3:04 UTC (permalink / raw)
To: tony.luck, reinette.chatre, bp, fenghuay, shuah, skhan
Cc: babu.moger, james.morse, Dave.Martin, x86, linux-kernel,
linux-kselftest, shenxiaochen
The resctrl selftest currently fails on Hygon CPUs that always supports
non-contiguous CBM, printing the error:
"# Hardware and kernel differ on non-contiguous CBM support!"
This occurs because the arch_supports_noncont_cat() function lacks
vendor detection for Hygon CPUs, preventing proper identification of
their non-contiguous CBM capability.
Fix this by adding Hygon vendor ID detection to
arch_supports_noncont_cat().
Signed-off-by: Xiaochen Shen <shenxiaochen@open-hieco.net>
Reviewed-by: Reinette Chatre <reinette.chatre@intel.com>
Reviewed-by: Fenghua Yu <fenghuay@nvidia.com>
---
tools/testing/selftests/resctrl/cat_test.c | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/tools/testing/selftests/resctrl/cat_test.c b/tools/testing/selftests/resctrl/cat_test.c
index 94cfdba5308d..f00b622c1460 100644
--- a/tools/testing/selftests/resctrl/cat_test.c
+++ b/tools/testing/selftests/resctrl/cat_test.c
@@ -290,8 +290,10 @@ static int cat_run_test(const struct resctrl_test *test, const struct user_param
static bool arch_supports_noncont_cat(const struct resctrl_test *test)
{
- /* AMD always supports non-contiguous CBM. */
- if (get_vendor() == ARCH_AMD)
+ unsigned int vendor_id = get_vendor();
+
+ /* AMD and Hygon always support non-contiguous CBM. */
+ if (vendor_id == ARCH_AMD || vendor_id == ARCH_HYGON)
return true;
#if defined(__i386__) || defined(__x86_64__) /* arch */
--
2.47.3
^ permalink raw reply related [flat|nested] 9+ messages in thread* Re: [PATCH v5 0/4] selftests/resctrl: Add Hygon CPUs support and bug fixes
2025-12-17 3:04 [PATCH v5 0/4] selftests/resctrl: Add Hygon CPUs support and bug fixes Xiaochen Shen
` (3 preceding siblings ...)
2025-12-17 3:04 ` [PATCH v5 4/4] selftests/resctrl: Fix non-contiguous CBM check " Xiaochen Shen
@ 2026-01-08 16:02 ` Reinette Chatre
2026-01-09 23:51 ` Shuah
4 siblings, 1 reply; 9+ messages in thread
From: Reinette Chatre @ 2026-01-08 16:02 UTC (permalink / raw)
To: Xiaochen Shen, tony.luck, bp, fenghuay, shuah, skhan
Cc: babu.moger, james.morse, Dave.Martin, x86, linux-kernel,
linux-kselftest
Dear Shuah,
Could you please consider this series for inclusion?
Thank you very much.
Reinette
On 12/16/25 7:04 PM, Xiaochen Shen wrote:
> The resctrl selftest currently exhibits several failures on Hygon CPUs
> due to missing vendor detection and edge-case handling specific to
> Hygon's architecture.
>
> This patch series addresses three distinct issues:
> 1. A division-by-zero crash in SNC detection on some platforms (e.g.,
> Hygon).
> 2. Missing CPU vendor detection, causing the test to fail with
> "# Can not get vendor info..." on Hygon CPUs.
> 3. Incorrect handling of non-contiguous CBM support on Hygon CPUs.
>
> These changes enable resctrl selftest to run successfully on
> Hygon CPUs that support Platform QoS features.
>
> Maintainer notes:
> -----------------
> Patch 1: selftests/resctrl: Fix a division by zero error on Hygon
> - This is a candidate for backport with "Fixes:" tag.
>
> Patch 2: selftests/resctrl: Define CPU vendor IDs as bits to match usage
> - This is *not* a candidate for backport since it is an enhancement and
> preparatory patch for patch 3.
>
> Patch 3: selftests/resctrl: Add CPU vendor detection for Hygon
> Patch 4: selftests/resctrl: Fix non-contiguous CBM check for Hygon
> - Even though they are fixes they are *not* candidates for backport
> since they are based on another patch series (x86/resctrl: Fix
> Platform QoS issues for Hygon) which is in process of being added to
> resctrl.
> -----------------
>
> Changelog:
> v5:
> - Patch 2:
> 1. Fix a nit of "reverse fir ordering" of the variable declarations in
> detect_vendor() in v4 patch series (Reinette).
> 2. Add Reviewed-by: Reinette Chatre <reinette.chatre@intel.com>.
>
> v4:
> - Cover letter: add maintainer notes outlining how these patches to be
> handled (Reinette).
> - Re-organize the patch series to move original patch 3 to the beginning
> of series. The patch order has changed between v3 and v4 (Reinette):
> v3 -> v4
> patch #3 -> patch #1
> patch #1 -> patch #2
> patch #2 -> patch #3
> patch #4 -> patch #4
> - Patch 2:
> 1. Resolve a conflict against latest upstream kernel (Reinette).
> 2. Fix a nit to maintain the reverse fir ordering of variables in
> detect_vendor() (Reinette).
> - Patch 3: add Reviewed-by: Reinette Chatre <reinette.chatre@intel.com>
> - Patch 4: move the maintainer note into the cover letter (Reinette).
>
> v3:
> - Patch 1:
> 1. Update the return types of detect_vendor() and get_vendor() from
> 'int' to 'unsigned int' to align with their usage as bitmask values
> and to prevent potentially risky type conversions (Fenghua).
> 2. Split the code changes of "define CPU vendor IDs as bits to match
> usage" from original patch 1 into a separate patch (this patch,
> suggested by Fenghua and Reinette).
> 3. Introduce the flag 'initialized' to simplify the get_vendor() ->
> detect_vendor() logic (Reinette).
> - Patch 2 (original patch 1):
> 1. Move the code changes of "define CPU vendor IDs as bits to match
> usage" into patch 1.
> - Patch 3 (original patch 2):
> 1. Fix a nit of code comment for affected platforms (Fenghua).
> 2. Add Reviewed-by: Fenghua Yu <fenghuay@nvidia.com>.
> - Patch 4 (original patch 3):
> 1. Fix a nit to avoid calling get_vendor() twice (Fenghua).
> 2. Add Reviewed-by: Fenghua Yu <fenghuay@nvidia.com>.
>
> v2:
> - Patch 1: switch all of the vendor id bitmasks to use BIT() (Reinette)
> - Patch 2: add Reviewed-by: Reinette Chatre <reinette.chatre@intel.com>
> - Patch 3: add Reviewed-by: Reinette Chatre <reinette.chatre@intel.com>
> add a maintainer note to highlight it is not a candidate for
> backport (Reinette)
>
> Xiaochen Shen (4):
> selftests/resctrl: Fix a division by zero error on Hygon
> selftests/resctrl: Define CPU vendor IDs as bits to match usage
> selftests/resctrl: Add CPU vendor detection for Hygon
> selftests/resctrl: Fix non-contiguous CBM check for Hygon
>
> tools/testing/selftests/resctrl/cat_test.c | 6 ++--
> tools/testing/selftests/resctrl/resctrl.h | 8 ++++--
> .../testing/selftests/resctrl/resctrl_tests.c | 28 +++++++++++++------
> tools/testing/selftests/resctrl/resctrlfs.c | 10 +++++++
> 4 files changed, 39 insertions(+), 13 deletions(-)
>
^ permalink raw reply [flat|nested] 9+ messages in thread* Re: [PATCH v5 0/4] selftests/resctrl: Add Hygon CPUs support and bug fixes
2026-01-08 16:02 ` [PATCH v5 0/4] selftests/resctrl: Add Hygon CPUs support and bug fixes Reinette Chatre
@ 2026-01-09 23:51 ` Shuah
2026-01-10 0:02 ` Reinette Chatre
0 siblings, 1 reply; 9+ messages in thread
From: Shuah @ 2026-01-09 23:51 UTC (permalink / raw)
To: Reinette Chatre, Xiaochen Shen, tony.luck, bp, fenghuay, shuah
Cc: babu.moger, james.morse, Dave.Martin, x86, linux-kernel,
linux-kselftest, Shuah Khan
Hi Reinette,
On 1/8/26 09:02, Reinette Chatre wrote:
> Dear Shuah,
>
> Could you please consider this series for inclusion?
>
> Thank you very much.
>
> Reinette
>
> On 12/16/25 7:04 PM, Xiaochen Shen wrote:
>> The resctrl selftest currently exhibits several failures on Hygon CPUs
>> due to missing vendor detection and edge-case handling specific to
>> Hygon's architecture.
>>
>> This patch series addresses three distinct issues:
>> 1. A division-by-zero crash in SNC detection on some platforms (e.g.,
>> Hygon).
>> 2. Missing CPU vendor detection, causing the test to fail with
>> "# Can not get vendor info..." on Hygon CPUs.
>> 3. Incorrect handling of non-contiguous CBM support on Hygon CPUs.
>>
>> These changes enable resctrl selftest to run successfully on
>> Hygon CPUs that support Platform QoS features.
>>
>> Maintainer notes:
>> -----------------
>> Patch 1: selftests/resctrl: Fix a division by zero error on Hygon
>> - This is a candidate for backport with "Fixes:" tag.
>>
>> Patch 2: selftests/resctrl: Define CPU vendor IDs as bits to match usage
>> - This is *not* a candidate for backport since it is an enhancement and
>> preparatory patch for patch 3.
>>
>> Patch 3: selftests/resctrl: Add CPU vendor detection for Hygon
>> Patch 4: selftests/resctrl: Fix non-contiguous CBM check for Hygon
>> - Even though they are fixes they are *not* candidates for backport
>> since they are based on another patch series (x86/resctrl: Fix
>> Platform QoS issues for Hygon) which is in process of being added to
>> resctrl.
>> -----------------
Applied to linux-kselftest next branch for Linux 6.20-rc1
thanks,
-- Shuah
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH v5 0/4] selftests/resctrl: Add Hygon CPUs support and bug fixes
2026-01-09 23:51 ` Shuah
@ 2026-01-10 0:02 ` Reinette Chatre
2026-01-10 7:26 ` Xiaochen Shen
0 siblings, 1 reply; 9+ messages in thread
From: Reinette Chatre @ 2026-01-10 0:02 UTC (permalink / raw)
To: Shuah, Xiaochen Shen, tony.luck, bp, fenghuay
Cc: babu.moger, james.morse, Dave.Martin, x86, linux-kernel,
linux-kselftest, Shuah Khan
On 1/9/26 3:51 PM, Shuah wrote:
>
> Applied to linux-kselftest next branch for Linux 6.20-rc1
Thank you very much Shuah.
Reinette
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH v5 0/4] selftests/resctrl: Add Hygon CPUs support and bug fixes
2026-01-10 0:02 ` Reinette Chatre
@ 2026-01-10 7:26 ` Xiaochen Shen
0 siblings, 0 replies; 9+ messages in thread
From: Xiaochen Shen @ 2026-01-10 7:26 UTC (permalink / raw)
To: Reinette Chatre, Shuah, tony.luck, bp, fenghuay
Cc: babu.moger, james.morse, Dave.Martin, x86, linux-kernel,
linux-kselftest, Shuah Khan, shenxiaochen
Hi Shuah, Reinette, Tony and Fenghua,
On 1/10/2026 8:02 AM, Reinette Chatre wrote:
>
>
> On 1/9/26 3:51 PM, Shuah wrote:
>>
>> Applied to linux-kselftest next branch for Linux 6.20-rc1
>
> Thank you very much Shuah.
>
> Reinette
I truly appreciate your great help with the code review and patch merge - thanks!
Best regards,
Xiaochen Shen
^ permalink raw reply [flat|nested] 9+ messages in thread