]> git.itanic.dy.fi Git - linux-stable/commitdiff
selftests/resctrl: Cleanup benchmark argument parsing
authorIlpo Järvinen <ilpo.jarvinen@linux.intel.com>
Mon, 4 Sep 2023 09:53:39 +0000 (12:53 +0300)
committerShuah Khan <skhan@linuxfoundation.org>
Fri, 13 Oct 2023 20:29:08 +0000 (14:29 -0600)
Benchmark argument is handled by custom argument parsing code which is
more complicated than it needs to be.

Process benchmark argument within the normal getopt() handling and drop
unnecessary ben_ind and has_ben variables. When -b is given, terminate
the argument processing as -b consumes all remaining arguments.

Signed-off-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
Tested-by: Shaopeng Tan <tan.shaopeng@jp.fujitsu.com>
Reviewed-by: Reinette Chatre <reinette.chatre@intel.com>
Reviewed-by: Shaopeng Tan <tan.shaopeng@jp.fujitsu.com>
Reviewed-by: "Wieczor-Retman, Maciej" <maciej.wieczor-retman@intel.com>
Signed-off-by: Shuah Khan <skhan@linuxfoundation.org>
tools/testing/selftests/resctrl/resctrl_tests.c

index 48e5afb1530ca1cf276a260372eb2f58db819e31..823672a20a439d576a63377428f72dc7d9bf3c4a 100644 (file)
@@ -169,27 +169,34 @@ static void run_cat_test(int cpu_no, int no_of_bits)
 
 int main(int argc, char **argv)
 {
-       bool has_ben = false, mbm_test = true, mba_test = true, cmt_test = true;
-       int c, cpu_no = 1, argc_new = argc, i, no_of_bits = 0;
-       const char *benchmark_cmd[BENCHMARK_ARGS];
-       int ben_ind, tests = 0;
+       bool mbm_test = true, mba_test = true, cmt_test = true;
+       const char *benchmark_cmd[BENCHMARK_ARGS] = {};
+       int c, cpu_no = 1, i, no_of_bits = 0;
        char *span_str = NULL;
        bool cat_test = true;
+       int tests = 0;
        int ret;
 
-       for (i = 0; i < argc; i++) {
-               if (strcmp(argv[i], "-b") == 0) {
-                       ben_ind = i + 1;
-                       argc_new = ben_ind - 1;
-                       has_ben = true;
-                       break;
-               }
-       }
-
-       while ((c = getopt(argc_new, argv, "ht:b:n:p:")) != -1) {
+       while ((c = getopt(argc, argv, "ht:b:n:p:")) != -1) {
                char *token;
 
                switch (c) {
+               case 'b':
+                       /*
+                        * First move optind back to the (first) optarg and
+                        * then build the benchmark command using the
+                        * remaining arguments.
+                        */
+                       optind--;
+                       if (argc - optind >= BENCHMARK_ARGS)
+                               ksft_exit_fail_msg("Too long benchmark command");
+
+                       /* Extract benchmark command from command line. */
+                       for (i = 0; i < argc - optind; i++)
+                               benchmark_cmd[i] = argv[i + optind];
+                       benchmark_cmd[i] = NULL;
+
+                       goto last_arg;
                case 't':
                        token = strtok(optarg, ",");
 
@@ -238,6 +245,7 @@ int main(int argc, char **argv)
                        return -1;
                }
        }
+last_arg:
 
        ksft_print_header();
 
@@ -257,15 +265,7 @@ int main(int argc, char **argv)
 
        filter_dmesg();
 
-       if (has_ben) {
-               if (argc - ben_ind >= BENCHMARK_ARGS)
-                       ksft_exit_fail_msg("Too long benchmark command.\n");
-
-               /* Extract benchmark command from command line. */
-               for (i = 0; i < argc - ben_ind; i++)
-                       benchmark_cmd[i] = argv[i + ben_ind];
-               benchmark_cmd[i] = NULL;
-       } else {
+       if (!benchmark_cmd[0]) {
                /* If no benchmark is given by "-b" argument, use fill_buf. */
                benchmark_cmd[0] = "fill_buf";
                ret = asprintf(&span_str, "%u", DEFAULT_SPAN);