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


Reply via email to