On Fri, 29 May 2026, Richard Cheng wrote: > 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 therefore spuriously fails on every ARM MPAM platform. > > Define ARCH_ARM, short-circuit detect_vendor() to it on aarch64, and > add it to the AMD/Hygon always-supports early-out in > arch_supports_noncont_cat(). > > aarch64 has many implementers (ARM 0x41, NVIDIA 0x43, etc.), but MPAM > mandates non-contiguous CPBM uniformly, so per-implementer handling 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 + > .../testing/selftests/resctrl/resctrl_tests.c | 21 +++++++++++++++++++ > 3 files changed, 29 insertions(+), 2 deletions(-) > > diff --git a/tools/testing/selftests/resctrl/cat_test.c > b/tools/testing/selftests/resctrl/cat_test.c > index dc414e55ae94..ce66016dbd88 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..cfece594a8c6 100644 > --- a/tools/testing/selftests/resctrl/resctrl_tests.c > +++ b/tools/testing/selftests/resctrl/resctrl_tests.c > @@ -23,6 +23,15 @@ static struct resctrl_test *resctrl_tests[] = { > &l2_noncont_cat_test, > }; > > +static bool detect_aarch64(void) > +{ > +#if defined(__aarch64__) > + return true; > +#else > + return false; > +#endif > +} > + > static unsigned int detect_vendor(void) > { > static unsigned int vendor_id; > @@ -34,6 +43,18 @@ static unsigned int detect_vendor(void) > if (initialized) > return vendor_id; > > + if (detect_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; > + } > + > inf = fopen("/proc/cpuinfo", "r"); > if (!inf) { > vendor_id = 0; >
Reviewed-by: Ilpo Järvinen <[email protected]> -- i.

