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 <[email protected]>
---
 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


Reply via email to