[PATCH] selftests/resctrl: Add ARM vendor detection and fix non-contig CBM check
From: Richard Cheng
Date: Mon May 25 2026 - 22:44:59 EST
aarch64 has no vendor_id in /proc/cpuinfo, so detect_vendor() returns 0
and arch_supports_noncont_cat() falls through to "return false".
L3_NONCONT_CAT spuriously fails on every ARM MPAM platform.
Define ARCH_ARM, short-circuite detect_vendor() to it on aarch64, and
add it to the AMD/Hygon alwasy-supports early-out in
arch_support_noncont_cat().
aarch64 has many implementers (ARM 0x41, NVIDIA 0x43, etc...) but MPAM
mandates non-contiguous CPBM uniformly, so per-implementer bits is not
needed here.
Signed-off-by: Richard Cheng <icheng@xxxxxxxxxx>
---
tools/testing/selftests/resctrl/cat_test.c | 9 +++++++--
tools/testing/selftests/resctrl/resctrl.h | 1 +
tools/testing/selftests/resctrl/resctrl_tests.c | 11 +++++++++++
3 files changed, 19 insertions(+), 2 deletions(-)
diff --git a/tools/testing/selftests/resctrl/cat_test.c b/tools/testing/selftests/resctrl/cat_test.c
index f00b622c1460..37ca70523ed2 100644
--- a/tools/testing/selftests/resctrl/cat_test.c
+++ b/tools/testing/selftests/resctrl/cat_test.c
@@ -292,8 +292,13 @@ static bool arch_supports_noncont_cat(const struct resctrl_test *test)
{
unsigned int vendor_id = get_vendor();
- /* AMD and Hygon always support non-contiguous CBM. */
- if (vendor_id == ARCH_AMD || vendor_id == ARCH_HYGON)
+ /*
+ * AMD and Hygon always support non-contiguous CBM. ARM/MPAM
+ * defines MPAMCFG_CPBM as a bitmap with no contiguity constraint
+ * per ARM DDI 0598.
+ */
+ if (vendor_id == ARCH_AMD || vendor_id == ARCH_HYGON ||
+ vendor_id == ARCH_ARM)
return true;
#if defined(__i386__) || defined(__x86_64__) /* arch */
diff --git a/tools/testing/selftests/resctrl/resctrl.h b/tools/testing/selftests/resctrl/resctrl.h
index afe635b6e48d..670e5b128b4d 100644
--- a/tools/testing/selftests/resctrl/resctrl.h
+++ b/tools/testing/selftests/resctrl/resctrl.h
@@ -40,6 +40,7 @@
#define ARCH_INTEL BIT(0)
#define ARCH_AMD BIT(1)
#define ARCH_HYGON BIT(2)
+#define ARCH_ARM BIT(3)
#define END_OF_TESTS 1
diff --git a/tools/testing/selftests/resctrl/resctrl_tests.c b/tools/testing/selftests/resctrl/resctrl_tests.c
index dbcd5eea9fbc..b97d3541fcb2 100644
--- a/tools/testing/selftests/resctrl/resctrl_tests.c
+++ b/tools/testing/selftests/resctrl/resctrl_tests.c
@@ -34,6 +34,17 @@ static unsigned int detect_vendor(void)
if (initialized)
return vendor_id;
+#if defined(__aarch64__)
+ /*
+ * aarch64 has no userspace vendor_id in /proc/cpuinfo. MPAM-capable
+ * ARM implementations follow ARM DDI 0598; treat all aarch64 builds
+ * as a single vendor for the purposes of resctrl selftests.
+ */
+ vendor_id = ARCH_ARM;
+ initialized = true;
+ return vendor_id;
+#endif
+
inf = fopen("/proc/cpuinfo", "r");
if (!inf) {
vendor_id = 0;
--
2.43.0