[RFC patch 8/9] selftests/resctrl: Add support for HiSilicon MBM/MBA test

From: Yifan Wu

Date: Tue Mar 03 2026 - 23:04:09 EST


This commit adds the support to check and test this feature on HiSilicon
platform.

Specifically, this is because on HiSilicon platform, the mbm_total_bytes
counter for MBM/MBA is located in the MB_MON, which is distinct from other
monitoring paths.

Signed-off-by: Yifan Wu <wuyifan50@xxxxxxxxxx>
---
tools/testing/selftests/resctrl/mba_test.c | 24 +++++++++++++++++++---
tools/testing/selftests/resctrl/mbm_test.c | 23 +++++++++++++++++----
2 files changed, 40 insertions(+), 7 deletions(-)

diff --git a/tools/testing/selftests/resctrl/mba_test.c b/tools/testing/selftests/resctrl/mba_test.c
index c41914f6a2e6..ebed2d2d6ce0 100644
--- a/tools/testing/selftests/resctrl/mba_test.c
+++ b/tools/testing/selftests/resctrl/mba_test.c
@@ -202,14 +202,32 @@ static int mba_run_test(const struct resctrl_test *test, const struct user_param

static bool mba_feature_check(const struct resctrl_test *test)
{
- return test_resource_feature_check(test) &&
- resctrl_mon_feature_exists("L3_MON", "mbm_local_bytes");
+ unsigned int vendor = get_vendor();
+ bool feature_exists = false;
+
+ switch (vendor) {
+ case ARCH_INTEL:
+ feature_exists = test_resource_feature_check(test) &&
+ resctrl_mon_feature_exists("L3_MON", "mbm_local_bytes");
+ break;
+
+ case ARCH_HISILICON:
+ feature_exists = test_resource_feature_check(test) &&
+ resctrl_mon_feature_exists("MB_MON", "mbm_total_bytes");
+ break;
+
+ default:
+ break;
+ }
+
+ return feature_exists;
+
}

struct resctrl_test mba_test = {
.name = "MBA",
.resource = "MB",
- .vendor_specific = ARCH_INTEL,
+ .vendor_specific = ARCH_INTEL | ARCH_HISILICON,
.feature_check = mba_feature_check,
.run_test = mba_run_test,
.cleanup = mba_test_cleanup,
diff --git a/tools/testing/selftests/resctrl/mbm_test.c b/tools/testing/selftests/resctrl/mbm_test.c
index 1d4ef268db5a..44bb450398e7 100644
--- a/tools/testing/selftests/resctrl/mbm_test.c
+++ b/tools/testing/selftests/resctrl/mbm_test.c
@@ -161,14 +161,29 @@ static int mbm_run_test(const struct resctrl_test *test, const struct user_param

static bool mbm_feature_check(const struct resctrl_test *test)
{
- return resctrl_mon_feature_exists("L3_MON", "mbm_total_bytes") &&
- resctrl_mon_feature_exists("L3_MON", "mbm_local_bytes");
-}
+ unsigned int vendor = get_vendor();
+ bool feature_exists = false;
+
+ switch (vendor) {
+ case ARCH_INTEL:
+ feature_exists = resctrl_mon_feature_exists("L3_MON", "mbm_total_bytes") &&
+ resctrl_mon_feature_exists("L3_MON", "mbm_local_bytes");
+ break;
+
+ case ARCH_HISILICON:
+ feature_exists = resctrl_mon_feature_exists("MB_MON", "mbm_total_bytes");
+ break;

+ default:
+ break;
+ }
+
+ return feature_exists;
+}
struct resctrl_test mbm_test = {
.name = "MBM",
.resource = "MB",
- .vendor_specific = ARCH_INTEL,
+ .vendor_specific = ARCH_INTEL | ARCH_HISILICON,
.feature_check = mbm_feature_check,
.run_test = mbm_run_test,
.cleanup = mbm_test_cleanup,
--
2.33.0