selftests/resctrl: Skip the test if requested resctrl feature is not supported
[linux-2.6-microblaze.git] / tools / testing / selftests / resctrl / mba_test.c
index 7bf8eaa..26f12ad 100644 (file)
@@ -12,7 +12,7 @@
 
 #define RESULT_FILE_NAME       "result_mba"
 #define NUM_OF_RUNS            5
-#define MAX_DIFF               300
+#define MAX_DIFF_PERCENT       5
 #define ALLOCATION_MAX         100
 #define ALLOCATION_MIN         10
 #define ALLOCATION_STEP                10
@@ -56,13 +56,14 @@ static void show_mba_info(unsigned long *bw_imc, unsigned long *bw_resc)
        int allocation, runs;
        bool failed = false;
 
-       printf("# Results are displayed in (MB)\n");
+       ksft_print_msg("Results are displayed in (MB)\n");
        /* Memory bandwidth from 100% down to 10% */
        for (allocation = 0; allocation < ALLOCATION_MAX / ALLOCATION_STEP;
             allocation++) {
                unsigned long avg_bw_imc, avg_bw_resc;
                unsigned long sum_bw_imc = 0, sum_bw_resc = 0;
-               unsigned long avg_diff;
+               int avg_diff_per;
+               float avg_diff;
 
                /*
                 * The first run is discarded due to inaccurate value from
@@ -76,23 +77,26 @@ static void show_mba_info(unsigned long *bw_imc, unsigned long *bw_resc)
 
                avg_bw_imc = sum_bw_imc / (NUM_OF_RUNS - 1);
                avg_bw_resc = sum_bw_resc / (NUM_OF_RUNS - 1);
-               avg_diff = labs((long)(avg_bw_resc - avg_bw_imc));
-
-               printf("%sok MBA schemata percentage %u smaller than %d %%\n",
-                      avg_diff > MAX_DIFF ? "not " : "",
-                      ALLOCATION_MAX - ALLOCATION_STEP * allocation,
-                      MAX_DIFF);
-               tests_run++;
-               printf("# avg_diff: %lu\n", avg_diff);
-               printf("# avg_bw_imc: %lu\n", avg_bw_imc);
-               printf("# avg_bw_resc: %lu\n", avg_bw_resc);
-               if (avg_diff > MAX_DIFF)
+               avg_diff = (float)labs(avg_bw_resc - avg_bw_imc) / avg_bw_imc;
+               avg_diff_per = (int)(avg_diff * 100);
+
+               ksft_print_msg("%s MBA: diff within %d%% for schemata %u\n",
+                              avg_diff_per > MAX_DIFF_PERCENT ?
+                              "Fail:" : "Pass:",
+                              MAX_DIFF_PERCENT,
+                              ALLOCATION_MAX - ALLOCATION_STEP * allocation);
+
+               ksft_print_msg("avg_diff_per: %d%%\n", avg_diff_per);
+               ksft_print_msg("avg_bw_imc: %lu\n", avg_bw_imc);
+               ksft_print_msg("avg_bw_resc: %lu\n", avg_bw_resc);
+               if (avg_diff_per > MAX_DIFF_PERCENT)
                        failed = true;
        }
 
-       printf("%sok schemata change using MBA%s\n", failed ? "not " : "",
-              failed ? " # at least one test failed" : "");
-       tests_run++;
+       ksft_print_msg("%s schemata change using MBA\n",
+                      failed ? "Fail:" : "Pass:");
+       if (failed)
+               ksft_print_msg("At least one test failed");
 }
 
 static int check_results(void)
@@ -141,7 +145,7 @@ void mba_test_cleanup(void)
 int mba_schemata_change(int cpu_no, char *bw_report, char **benchmark_cmd)
 {
        struct resctrl_val_param param = {
-               .resctrl_val    = "mba",
+               .resctrl_val    = MBA_STR,
                .ctrlgrp        = "c1",
                .mongrp         = "m1",
                .cpu_no         = cpu_no,
@@ -154,9 +158,6 @@ int mba_schemata_change(int cpu_no, char *bw_report, char **benchmark_cmd)
 
        remove(RESULT_FILE_NAME);
 
-       if (!validate_resctrl_feature_request("mba"))
-               return -1;
-
        ret = resctrl_val(benchmark_cmd, &param);
        if (ret)
                return ret;