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

