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

selftests/resctrl: Cleanup bm_pid and ppid usage & limit scope

'bm_pid' and 'ppid' are global variables. As they are used by different
processes and in signal handler, they cannot be entirely converted into
local variables.

The scope of those variables can still be reduced into resctrl_val.c
only. As PARENT_EXIT() macro is using 'ppid', make it a function in
resctrl_val.c and pass ppid to it as an argument because it is easier
to understand than using the global variable directly.

Pass 'bm_pid' into measure_vals() instead of relying on the global
variable which helps to make the call signatures of measure_vals() and
measure_llc_resctrl() more similar to each other.
Signed-off-by: default avatarIlpo Järvinen <ilpo.jarvinen@linux.intel.com>
Tested-by: default avatarBabu Moger <babu.moger@amd.com>
Reviewed-by: default avatarReinette Chatre <reinette.chatre@intel.com>
Signed-off-by: default avatarShuah Khan <skhan@linuxfoundation.org>
parent 8245a70e
...@@ -43,13 +43,6 @@ ...@@ -43,13 +43,6 @@
#define DEFAULT_SPAN (250 * MB) #define DEFAULT_SPAN (250 * MB)
#define PARENT_EXIT() \
do { \
kill(ppid, SIGKILL); \
umount_resctrlfs(); \
exit(EXIT_FAILURE); \
} while (0)
/* /*
* user_params: User supplied parameters * user_params: User supplied parameters
* @cpu: CPU number to which the benchmark will be bound to * @cpu: CPU number to which the benchmark will be bound to
...@@ -127,8 +120,6 @@ struct perf_event_read { ...@@ -127,8 +120,6 @@ struct perf_event_read {
*/ */
extern volatile int *value_sink; extern volatile int *value_sink;
extern pid_t bm_pid, ppid;
extern char llc_occup_path[1024]; extern char llc_occup_path[1024];
int get_vendor(void); int get_vendor(void);
......
...@@ -499,7 +499,7 @@ static int get_mem_bw_resctrl(FILE *fp, unsigned long *mbm_total) ...@@ -499,7 +499,7 @@ static int get_mem_bw_resctrl(FILE *fp, unsigned long *mbm_total)
return 0; return 0;
} }
pid_t bm_pid, ppid; static pid_t bm_pid, ppid;
void ctrlc_handler(int signum, siginfo_t *info, void *ptr) void ctrlc_handler(int signum, siginfo_t *info, void *ptr)
{ {
...@@ -557,6 +557,13 @@ void signal_handler_unregister(void) ...@@ -557,6 +557,13 @@ void signal_handler_unregister(void)
} }
} }
static void parent_exit(pid_t ppid)
{
kill(ppid, SIGKILL);
umount_resctrlfs();
exit(EXIT_FAILURE);
}
/* /*
* print_results_bw: the memory bandwidth results are stored in a file * print_results_bw: the memory bandwidth results are stored in a file
* @filename: file that stores the results * @filename: file that stores the results
...@@ -631,7 +638,7 @@ static void initialize_llc_occu_resctrl(const char *ctrlgrp, const char *mongrp, ...@@ -631,7 +638,7 @@ static void initialize_llc_occu_resctrl(const char *ctrlgrp, const char *mongrp,
* 1 sec to measure the data. * 1 sec to measure the data.
*/ */
static int measure_vals(const struct user_params *uparams, static int measure_vals(const struct user_params *uparams,
struct resctrl_val_param *param) struct resctrl_val_param *param, pid_t bm_pid)
{ {
unsigned long bw_resc, bw_resc_start, bw_resc_end; unsigned long bw_resc, bw_resc_start, bw_resc_end;
FILE *mem_bw_fp; FILE *mem_bw_fp;
...@@ -700,7 +707,7 @@ static void run_benchmark(int signum, siginfo_t *info, void *ucontext) ...@@ -700,7 +707,7 @@ static void run_benchmark(int signum, siginfo_t *info, void *ucontext)
fp = freopen("/dev/null", "w", stdout); fp = freopen("/dev/null", "w", stdout);
if (!fp) { if (!fp) {
ksft_perror("Unable to direct benchmark status to /dev/null"); ksft_perror("Unable to direct benchmark status to /dev/null");
PARENT_EXIT(); parent_exit(ppid);
} }
if (strcmp(benchmark_cmd[0], "fill_buf") == 0) { if (strcmp(benchmark_cmd[0], "fill_buf") == 0) {
...@@ -714,7 +721,7 @@ static void run_benchmark(int signum, siginfo_t *info, void *ucontext) ...@@ -714,7 +721,7 @@ static void run_benchmark(int signum, siginfo_t *info, void *ucontext)
once = false; once = false;
} else { } else {
ksft_print_msg("Invalid once parameter\n"); ksft_print_msg("Invalid once parameter\n");
PARENT_EXIT(); parent_exit(ppid);
} }
if (run_fill_buf(span, memflush, operation, once)) if (run_fill_buf(span, memflush, operation, once))
...@@ -728,7 +735,7 @@ static void run_benchmark(int signum, siginfo_t *info, void *ucontext) ...@@ -728,7 +735,7 @@ static void run_benchmark(int signum, siginfo_t *info, void *ucontext)
fclose(stdout); fclose(stdout);
ksft_print_msg("Unable to run specified benchmark\n"); ksft_print_msg("Unable to run specified benchmark\n");
PARENT_EXIT(); parent_exit(ppid);
} }
/* /*
...@@ -807,7 +814,7 @@ int resctrl_val(const struct resctrl_test *test, ...@@ -807,7 +814,7 @@ int resctrl_val(const struct resctrl_test *test,
/* Register for "SIGUSR1" signal from parent */ /* Register for "SIGUSR1" signal from parent */
if (sigaction(SIGUSR1, &sigact, NULL)) { if (sigaction(SIGUSR1, &sigact, NULL)) {
ksft_perror("Can't register child for signal"); ksft_perror("Can't register child for signal");
PARENT_EXIT(); parent_exit(ppid);
} }
/* Tell parent that child is ready */ /* Tell parent that child is ready */
...@@ -825,7 +832,7 @@ int resctrl_val(const struct resctrl_test *test, ...@@ -825,7 +832,7 @@ int resctrl_val(const struct resctrl_test *test,
sigsuspend(&sigact.sa_mask); sigsuspend(&sigact.sa_mask);
ksft_perror("Child is done"); ksft_perror("Child is done");
PARENT_EXIT(); parent_exit(ppid);
} }
ksft_print_msg("Benchmark PID: %d\n", (int)bm_pid); ksft_print_msg("Benchmark PID: %d\n", (int)bm_pid);
...@@ -895,7 +902,7 @@ int resctrl_val(const struct resctrl_test *test, ...@@ -895,7 +902,7 @@ int resctrl_val(const struct resctrl_test *test,
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))) {
ret = measure_vals(uparams, param); ret = measure_vals(uparams, param, bm_pid);
if (ret) if (ret)
break; break;
} else if (!strncmp(resctrl_val, CMT_STR, sizeof(CMT_STR))) { } else if (!strncmp(resctrl_val, CMT_STR, sizeof(CMT_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