Commit fa10366c authored by Ilpo Järvinen's avatar Ilpo Järvinen Committed by Shuah Khan

selftests/resctrl: Allow ->setup() to return errors

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: 790bf585 ("selftests/resctrl: Add Cache Allocation Technology (CAT) selftest")
Fixes: ecdbb911 ("selftests/resctrl: Add MBM test")
Signed-off-by: default avatarIlpo Järvinen <ilpo.jarvinen@linux.intel.com>
Reviewed-by: default avatarReinette Chatre <reinette.chatre@intel.com>
Signed-off-by: default avatarShuah Khan <skhan@linuxfoundation.org>
parent c90b3b58
...@@ -244,10 +244,12 @@ int cat_val(struct resctrl_val_param *param) ...@@ -244,10 +244,12 @@ int cat_val(struct resctrl_val_param *param)
while (1) { while (1) {
if (!strncmp(resctrl_val, CAT_STR, sizeof(CAT_STR))) { if (!strncmp(resctrl_val, CAT_STR, sizeof(CAT_STR))) {
ret = param->setup(1, param); ret = param->setup(1, param);
if (ret) { if (ret == END_OF_TESTS) {
ret = 0; ret = 0;
break; break;
} }
if (ret < 0)
break;
ret = reset_enable_llc_perf(bm_pid, param->cpu_no); ret = reset_enable_llc_perf(bm_pid, param->cpu_no);
if (ret) if (ret)
break; break;
......
...@@ -40,7 +40,7 @@ static int cat_setup(int num, ...) ...@@ -40,7 +40,7 @@ static int cat_setup(int num, ...)
/* Run NUM_OF_RUNS times */ /* Run NUM_OF_RUNS times */
if (p->num_of_runs >= NUM_OF_RUNS) if (p->num_of_runs >= NUM_OF_RUNS)
return -1; return END_OF_TESTS;
if (p->num_of_runs == 0) { if (p->num_of_runs == 0) {
sprintf(schemata, "%lx", p->mask); sprintf(schemata, "%lx", p->mask);
......
...@@ -32,7 +32,7 @@ static int cmt_setup(int num, ...) ...@@ -32,7 +32,7 @@ static int cmt_setup(int num, ...)
/* Run NUM_OF_RUNS times */ /* Run NUM_OF_RUNS times */
if (p->num_of_runs >= NUM_OF_RUNS) if (p->num_of_runs >= NUM_OF_RUNS)
return -1; return END_OF_TESTS;
p->num_of_runs++; p->num_of_runs++;
......
...@@ -41,7 +41,7 @@ static int mba_setup(int num, ...) ...@@ -41,7 +41,7 @@ static int mba_setup(int num, ...)
return 0; return 0;
if (allocation < ALLOCATION_MIN || allocation > ALLOCATION_MAX) if (allocation < ALLOCATION_MIN || allocation > ALLOCATION_MAX)
return -1; return END_OF_TESTS;
sprintf(allocation_str, "%d", allocation); sprintf(allocation_str, "%d", allocation);
......
...@@ -95,7 +95,7 @@ static int mbm_setup(int num, ...) ...@@ -95,7 +95,7 @@ static int mbm_setup(int num, ...)
/* Run NUM_OF_RUNS times */ /* Run NUM_OF_RUNS times */
if (num_of_runs++ >= NUM_OF_RUNS) if (num_of_runs++ >= NUM_OF_RUNS)
return -1; return END_OF_TESTS;
va_start(param, num); va_start(param, num);
p = va_arg(param, struct resctrl_val_param *); p = va_arg(param, struct resctrl_val_param *);
......
...@@ -37,6 +37,8 @@ ...@@ -37,6 +37,8 @@
#define ARCH_INTEL 1 #define ARCH_INTEL 1
#define ARCH_AMD 2 #define ARCH_AMD 2
#define END_OF_TESTS 1
#define PARENT_EXIT(err_msg) \ #define PARENT_EXIT(err_msg) \
do { \ do { \
perror(err_msg); \ perror(err_msg); \
......
...@@ -735,10 +735,12 @@ int resctrl_val(char **benchmark_cmd, struct resctrl_val_param *param) ...@@ -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. */ /* Test runs until the callback setup() tells the test to stop. */
while (1) { while (1) {
ret = param->setup(1, param); ret = param->setup(1, param);
if (ret) { if (ret == END_OF_TESTS) {
ret = 0; ret = 0;
break; break;
} }
if (ret < 0)
break;
if (!strncmp(resctrl_val, MBM_STR, sizeof(MBM_STR)) || if (!strncmp(resctrl_val, MBM_STR, sizeof(MBM_STR)) ||
!strncmp(resctrl_val, MBA_STR, sizeof(MBA_STR))) { !strncmp(resctrl_val, MBA_STR, sizeof(MBA_STR))) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment