selftests/resctrl: Allow ->setup() to return errors
authorIlpo Järvinen <ilpo.jarvinen@linux.intel.com>
Wed, 15 Feb 2023 13:05:59 +0000 (15:05 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 11 May 2023 14:03:06 +0000 (23:03 +0900)
[ Upstream commit fa10366cc6f4cc862871f8938426d85c2481f084 ]

resctrl_val() assumes ->setup() always returns either 0 to continue
tests or < 0 in case of the normal termination of tests after x runs.
The latter overlaps with normal error returns.

Define END_OF_TESTS (=1) to differentiate the normal termination of
tests and return errors as negative values. Alter callers of ->setup()
to handle errors properly.

Fixes: 790bf585b0ee ("selftests/resctrl: Add Cache Allocation Technology (CAT) selftest")
Fixes: ecdbb911f22d ("selftests/resctrl: Add MBM test")
Signed-off-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
Reviewed-by: Reinette Chatre <reinette.chatre@intel.com>
Signed-off-by: Shuah Khan <skhan@linuxfoundation.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
tools/testing/selftests/resctrl/cache.c
tools/testing/selftests/resctrl/cat_test.c
tools/testing/selftests/resctrl/cmt_test.c
tools/testing/selftests/resctrl/mba_test.c
tools/testing/selftests/resctrl/mbm_test.c
tools/testing/selftests/resctrl/resctrl.h
tools/testing/selftests/resctrl/resctrl_val.c

index 68ff856..0485863 100644 (file)
@@ -244,10 +244,12 @@ int cat_val(struct resctrl_val_param *param)
        while (1) {
                if (!strncmp(resctrl_val, CAT_STR, sizeof(CAT_STR))) {
                        ret = param->setup(1, param);
-                       if (ret) {
+                       if (ret == END_OF_TESTS) {
                                ret = 0;
                                break;
                        }
+                       if (ret < 0)
+                               break;
                        ret = reset_enable_llc_perf(bm_pid, param->cpu_no);
                        if (ret)
                                break;
index 1c5e90c..2d3c7c7 100644 (file)
@@ -40,7 +40,7 @@ static int cat_setup(int num, ...)
 
        /* Run NUM_OF_RUNS times */
        if (p->num_of_runs >= NUM_OF_RUNS)
-               return -1;
+               return END_OF_TESTS;
 
        if (p->num_of_runs == 0) {
                sprintf(schemata, "%lx", p->mask);
index 8968e36..3b0454e 100644 (file)
@@ -32,7 +32,7 @@ static int cmt_setup(int num, ...)
 
        /* Run NUM_OF_RUNS times */
        if (p->num_of_runs >= NUM_OF_RUNS)
-               return -1;
+               return END_OF_TESTS;
 
        p->num_of_runs++;
 
index 1a1bdb6..f32289a 100644 (file)
@@ -41,7 +41,7 @@ static int mba_setup(int num, ...)
                return 0;
 
        if (allocation < ALLOCATION_MIN || allocation > ALLOCATION_MAX)
-               return -1;
+               return END_OF_TESTS;
 
        sprintf(allocation_str, "%d", allocation);
 
index 8392e5c..2801876 100644 (file)
@@ -95,7 +95,7 @@ static int mbm_setup(int num, ...)
 
        /* Run NUM_OF_RUNS times */
        if (num_of_runs++ >= NUM_OF_RUNS)
-               return -1;
+               return END_OF_TESTS;
 
        va_start(param, num);
        p = va_arg(param, struct resctrl_val_param *);
index f0ded31..f44fa2d 100644 (file)
@@ -37,6 +37,8 @@
 #define ARCH_INTEL     1
 #define ARCH_AMD       2
 
+#define END_OF_TESTS   1
+
 #define PARENT_EXIT(err_msg)                   \
        do {                                    \
                perror(err_msg);                \
index 787546a..0086424 100644 (file)
@@ -735,10 +735,12 @@ int resctrl_val(char **benchmark_cmd, struct resctrl_val_param *param)
        /* Test runs until the callback setup() tells the test to stop. */
        while (1) {
                ret = param->setup(1, param);
-               if (ret) {
+               if (ret == END_OF_TESTS) {
                        ret = 0;
                        break;
                }
+               if (ret < 0)
+                       break;
 
                if (!strncmp(resctrl_val, MBM_STR, sizeof(MBM_STR)) ||
                    !strncmp(resctrl_val, MBA_STR, sizeof(MBA_STR))) {