]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
tools/rtla: Add common_parse_options()
authorCosta Shulyupin <costa.shul@redhat.com>
Tue, 9 Dec 2025 10:00:40 +0000 (12:00 +0200)
committerTomas Glozar <tglozar@redhat.com>
Wed, 7 Jan 2026 14:57:16 +0000 (15:57 +0100)
Each rtla tool duplicates parsing of many common options. This creates
maintenance overhead and risks inconsistencies when updating these
options.

Add common_parse_options() to centralize parsing of options used across
all tools.

Common options to be migrated in future patches.

Changes since v1:
- restore opterr

Signed-off-by: Costa Shulyupin <costa.shul@redhat.com>
Link: https://lore.kernel.org/r/20251209100047.2692515-1-costa.shul@redhat.com
Signed-off-by: Tomas Glozar <tglozar@redhat.com>
tools/tracing/rtla/src/common.c
tools/tracing/rtla/src/common.h
tools/tracing/rtla/src/osnoise_hist.c
tools/tracing/rtla/src/osnoise_top.c
tools/tracing/rtla/src/timerlat_hist.c
tools/tracing/rtla/src/timerlat_top.c

index 009a4bce97376132ff568edbaed2a6d17fdae8ef..c01de7972bea52c8e82e8f84c0d831724dbb50a4 100644 (file)
@@ -6,6 +6,7 @@
 #include <stdlib.h>
 #include <string.h>
 #include <unistd.h>
+#include <getopt.h>
 #include "common.h"
 
 struct trace_instance *trace_inst;
@@ -38,6 +39,40 @@ static void set_signals(struct common_params *params)
        }
 }
 
+/*
+ * common_parse_options - parse common command line options
+ *
+ * @argc: argument count
+ * @argv: argument vector
+ * @common: common parameters structure
+ *
+ * Parse command line options that are common to all rtla tools.
+ *
+ * Returns: non zero if a common option was parsed, or 0
+ * if the option should be handled by tool-specific parsing.
+ */
+int common_parse_options(int argc, char **argv, struct common_params *common)
+{
+       int saved_state = optind;
+       int c;
+
+       static struct option long_options[] = {
+               {0, 0, 0, 0}
+       };
+
+       opterr = 0;
+       c = getopt_long(argc, argv, "", long_options, NULL);
+       opterr = 1;
+
+       switch (c) {
+       default:
+               optind = saved_state;
+               return 0;
+       }
+
+       return c;
+}
+
 /*
  * common_apply_config - apply common configs to the initialized tool
  */
index c48c9bfd20e3db4be8078d8e33cea3b60e907495..ef17ea5be540a79a2e39ce1d74a4d98f87ce82dc 100644 (file)
@@ -156,6 +156,7 @@ int osnoise_set_stop_us(struct osnoise_context *context, long long stop_us);
 int osnoise_set_stop_total_us(struct osnoise_context *context,
                              long long stop_total_us);
 
+int common_parse_options(int argc, char **argv, struct common_params *common);
 int common_apply_config(struct osnoise_tool *tool, struct common_params *params);
 int top_main_loop(struct osnoise_tool *tool);
 int hist_main_loop(struct osnoise_tool *tool);
index 372128db9e4af9030a974df9e7d38556c13e708b..d5c78e07bf60774fb18fb37319fdc116e1893d65 100644 (file)
@@ -512,6 +512,9 @@ static struct common_params
                        {0, 0, 0, 0}
                };
 
+               if (common_parse_options(argc, argv, &params->common))
+                       continue;
+
                c = getopt_long(argc, argv, "a:c:C::b:d:e:E:DhH:p:P:r:s:S:t::T:01234:5:6:7:",
                                 long_options, NULL);
 
index 1db1d946b6005d355ec4696a3bb1ec271220730e..2bb154da1139595bd7328409637bc1b9f0145a1c 100644 (file)
@@ -363,6 +363,9 @@ struct common_params *osnoise_top_parse_args(int argc, char **argv)
                        {0, 0, 0, 0}
                };
 
+               if (common_parse_options(argc, argv, &params->common))
+                       continue;
+
                c = getopt_long(argc, argv, "a:c:C::d:De:hH:p:P:qr:s:S:t::T:0:1:2:3:",
                                 long_options, NULL);
 
index ec43e6fda743dbcbe3d803ee396030bde36324ef..a17111b6aa6dae232501bbb974fc4e7b3050db47 100644 (file)
@@ -830,6 +830,9 @@ static struct common_params
                        {0, 0, 0, 0}
                };
 
+               if (common_parse_options(argc, argv, &params->common))
+                       continue;
+
                c = getopt_long(argc, argv, "a:c:C::b:d:e:E:DhH:i:knp:P:s:t::T:uU0123456:7:8:9\1\2:\3:",
                                 long_options, NULL);
 
index af20b3eee472ad0977c85ed0db5a9ddab55b965f..b14a785361b1738402368bac5a712ea6e683520b 100644 (file)
@@ -594,6 +594,9 @@ static struct common_params
                        {0, 0, 0, 0}
                };
 
+               if (common_parse_options(argc, argv, &params->common))
+                       continue;
+
                c = getopt_long(argc, argv, "a:c:C::d:De:hH:i:knp:P:qs:t::T:uU0:1:2:345:6:7:",
                                 long_options, NULL);