Message ID | 20220408072431.94947-1-atrajeev@linux.vnet.ibm.com (mailing list archive) |
---|---|
State | Accepted |
Commit | ce64763c63854b4079f2e036638aa881a1fb3fbc |
Headers | show |
Series | [V3] testing/selftests/mqueue: Fix mq_perf_tests to free the allocated cpu set | expand |
On 4/8/22 1:24 AM, Athira Rajeev wrote: > The selftest "mqueue/mq_perf_tests.c" use CPU_ALLOC to allocate > CPU set. This cpu set is used further in pthread_attr_setaffinity_np > and by pthread_create in the code. But in current code, allocated > cpu set is not freed. > > Fix this issue by adding CPU_FREE in the "shutdown" function which > is called in most of the error/exit path for the cleanup. There are > few error paths which exit without using shutdown. Add a common goto > error path with CPU_FREE for these cases. > > Fixes: 7820b0715b6f ("tools/selftests: add mq_perf_tests") > Signed-off-by: Athira Rajeev <atrajeev@linux.vnet.ibm.com> > --- > Changelog: > From v2 -> v3: > Addressed review comment from Shuah Khan to add > common "goto" error path with CPU_FREE for few exit > cases. > From v1 -> v2: > Addressed review comment from Shuah Khan to add > CPU_FREE in other exit paths where it is needed > Thank you. I will queue this up for Linux 5.18-rc3 thanks, -- Shuah
> On 09-Apr-2022, at 12:00 AM, Shuah Khan <skhan@linuxfoundation.org> wrote: > > On 4/8/22 1:24 AM, Athira Rajeev wrote: >> The selftest "mqueue/mq_perf_tests.c" use CPU_ALLOC to allocate >> CPU set. This cpu set is used further in pthread_attr_setaffinity_np >> and by pthread_create in the code. But in current code, allocated >> cpu set is not freed. >> Fix this issue by adding CPU_FREE in the "shutdown" function which >> is called in most of the error/exit path for the cleanup. There are >> few error paths which exit without using shutdown. Add a common goto >> error path with CPU_FREE for these cases. >> Fixes: 7820b0715b6f ("tools/selftests: add mq_perf_tests") >> Signed-off-by: Athira Rajeev <atrajeev@linux.vnet.ibm.com> >> --- >> Changelog: >> From v2 -> v3: >> Addressed review comment from Shuah Khan to add >> common "goto" error path with CPU_FREE for few exit >> cases. >> From v1 -> v2: >> Addressed review comment from Shuah Khan to add >> CPU_FREE in other exit paths where it is needed > > Thank you. I will queue this up for Linux 5.18-rc3 Thanks Shuah Athira > > thanks, > -- Shuah
diff --git a/tools/testing/selftests/mqueue/mq_perf_tests.c b/tools/testing/selftests/mqueue/mq_perf_tests.c index b019e0b8221c..84fda3b49073 100644 --- a/tools/testing/selftests/mqueue/mq_perf_tests.c +++ b/tools/testing/selftests/mqueue/mq_perf_tests.c @@ -180,6 +180,9 @@ void shutdown(int exit_val, char *err_cause, int line_no) if (in_shutdown++) return; + /* Free the cpu_set allocated using CPU_ALLOC in main function */ + CPU_FREE(cpu_set); + for (i = 0; i < num_cpus_to_pin; i++) if (cpu_threads[i]) { pthread_kill(cpu_threads[i], SIGUSR1); @@ -551,6 +554,12 @@ int main(int argc, char *argv[]) perror("sysconf(_SC_NPROCESSORS_ONLN)"); exit(1); } + + if (getuid() != 0) + ksft_exit_skip("Not running as root, but almost all tests " + "require root in order to modify\nsystem settings. " + "Exiting.\n"); + cpus_online = min(MAX_CPUS, sysconf(_SC_NPROCESSORS_ONLN)); cpu_set = CPU_ALLOC(cpus_online); if (cpu_set == NULL) { @@ -589,7 +598,7 @@ int main(int argc, char *argv[]) cpu_set)) { fprintf(stderr, "Any given CPU may " "only be given once.\n"); - exit(1); + goto err_code; } else CPU_SET_S(cpus_to_pin[cpu], cpu_set_size, cpu_set); @@ -607,7 +616,7 @@ int main(int argc, char *argv[]) queue_path = malloc(strlen(option) + 2); if (!queue_path) { perror("malloc()"); - exit(1); + goto err_code; } queue_path[0] = '/'; queue_path[1] = 0; @@ -622,17 +631,12 @@ int main(int argc, char *argv[]) fprintf(stderr, "Must pass at least one CPU to continuous " "mode.\n"); poptPrintUsage(popt_context, stderr, 0); - exit(1); + goto err_code; } else if (!continuous_mode) { num_cpus_to_pin = 1; cpus_to_pin[0] = cpus_online - 1; } - if (getuid() != 0) - ksft_exit_skip("Not running as root, but almost all tests " - "require root in order to modify\nsystem settings. " - "Exiting.\n"); - max_msgs = fopen(MAX_MSGS, "r+"); max_msgsize = fopen(MAX_MSGSIZE, "r+"); if (!max_msgs) @@ -740,4 +744,9 @@ int main(int argc, char *argv[]) sleep(1); } shutdown(0, "", 0); + +err_code: + CPU_FREE(cpu_set); + exit(1); + }
The selftest "mqueue/mq_perf_tests.c" use CPU_ALLOC to allocate CPU set. This cpu set is used further in pthread_attr_setaffinity_np and by pthread_create in the code. But in current code, allocated cpu set is not freed. Fix this issue by adding CPU_FREE in the "shutdown" function which is called in most of the error/exit path for the cleanup. There are few error paths which exit without using shutdown. Add a common goto error path with CPU_FREE for these cases. Fixes: 7820b0715b6f ("tools/selftests: add mq_perf_tests") Signed-off-by: Athira Rajeev <atrajeev@linux.vnet.ibm.com> --- Changelog: From v2 -> v3: Addressed review comment from Shuah Khan to add common "goto" error path with CPU_FREE for few exit cases. From v1 -> v2: Addressed review comment from Shuah Khan to add CPU_FREE in other exit paths where it is needed .../testing/selftests/mqueue/mq_perf_tests.c | 25 +++++++++++++------ 1 file changed, 17 insertions(+), 8 deletions(-)