From: Costa Shulyupin Date: Tue, 9 Dec 2025 10:00:40 +0000 (+0200) Subject: tools/rtla: Add common_parse_options() X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=850cd24cb6d648262b994b99e189409b21a2c09b;p=thirdparty%2Flinux.git tools/rtla: Add common_parse_options() 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 Link: https://lore.kernel.org/r/20251209100047.2692515-1-costa.shul@redhat.com Signed-off-by: Tomas Glozar --- diff --git a/tools/tracing/rtla/src/common.c b/tools/tracing/rtla/src/common.c index 009a4bce97376..c01de7972bea5 100644 --- a/tools/tracing/rtla/src/common.c +++ b/tools/tracing/rtla/src/common.c @@ -6,6 +6,7 @@ #include #include #include +#include #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 */ diff --git a/tools/tracing/rtla/src/common.h b/tools/tracing/rtla/src/common.h index c48c9bfd20e3d..ef17ea5be540a 100644 --- a/tools/tracing/rtla/src/common.h +++ b/tools/tracing/rtla/src/common.h @@ -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); diff --git a/tools/tracing/rtla/src/osnoise_hist.c b/tools/tracing/rtla/src/osnoise_hist.c index 372128db9e4af..d5c78e07bf607 100644 --- a/tools/tracing/rtla/src/osnoise_hist.c +++ b/tools/tracing/rtla/src/osnoise_hist.c @@ -512,6 +512,9 @@ static struct common_params {0, 0, 0, 0} }; + if (common_parse_options(argc, argv, ¶ms->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); diff --git a/tools/tracing/rtla/src/osnoise_top.c b/tools/tracing/rtla/src/osnoise_top.c index 1db1d946b6005..2bb154da11395 100644 --- a/tools/tracing/rtla/src/osnoise_top.c +++ b/tools/tracing/rtla/src/osnoise_top.c @@ -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, ¶ms->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); diff --git a/tools/tracing/rtla/src/timerlat_hist.c b/tools/tracing/rtla/src/timerlat_hist.c index ec43e6fda743d..a17111b6aa6da 100644 --- a/tools/tracing/rtla/src/timerlat_hist.c +++ b/tools/tracing/rtla/src/timerlat_hist.c @@ -830,6 +830,9 @@ static struct common_params {0, 0, 0, 0} }; + if (common_parse_options(argc, argv, ¶ms->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); diff --git a/tools/tracing/rtla/src/timerlat_top.c b/tools/tracing/rtla/src/timerlat_top.c index af20b3eee472a..b14a785361b17 100644 --- a/tools/tracing/rtla/src/timerlat_top.c +++ b/tools/tracing/rtla/src/timerlat_top.c @@ -594,6 +594,9 @@ static struct common_params {0, 0, 0, 0} }; + if (common_parse_options(argc, argv, ¶ms->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);