Skip to content

Commit 5d9af63

Browse files
rtla: Parse cmdline using libsubcmd
Instead of using getopt_long() directly to parse the command line arguments given to an RTLA tool, use libsubcmd's parse_options(). Utilizing libsubcmd for parsing command line arguments has several benefits: - A help message is automatically generated by libsubcmd from the specification, removing the need of writing it by hand. - Options are sorted into groups based on which part of tracing (CPU, thread, auto-analysis, tuning, histogram) they relate to. - Common parsing patterns for numerical and boolean values now share code, with the target variable being stored in the option array. To avoid duplication of the option parsing logic, RTLA-specific macros defining struct option values are created: - RTLA_OPT_* for options common to all tools - OSNOISE_OPT_* and TIMERLAT_OPT_* for options specific to osnoise/timerlat tools - HIST_OPT_* macros for options specific to histogram-based tools. Individual *_parse_args() functions then construct an array out of these macros that is then passed to libsubcmd's parse_options(). All code specific to command line options parsing is moved out of the individual tool files into a new file, cli.c, which also contains the contents of the rtla.c file. A private header, cli_p.h, is added alongside the public header cli.h, so that unit tests are able to test statically declared option callbacks. Minor changes: - The return value of tool-level help option changes to 129, as this is the value set by libsubcmd; this is reflected in affected test cases. The implementation of help for command-level and tracer-level help is set to 129 as well for consistency, and the change is reflected in exit value documentation. - Related to the above, {rtla,osnoise,timerlat}_usage() are marked __noreturn and exit() is removed from after they are called for cleaner code. - The error messages for invalid argument for options --dma-latency and -E/--entries were corrected, fixing off-by-one in the limits. Note that unsetting options (using --no-<opt> syntax) is currently not implemented for options that use custom callbacks. For --irq and --thread, it will never be implemented, as they conflict with already existing --no-irq and --no-thread with a different meaning. Assisted-by: Composer:composer-1.5 Link: https://lore.kernel.org/r/20260528103254.2990068-5-tglozar@redhat.com Signed-off-by: Tomas Glozar <tglozar@redhat.com>
1 parent da62fc3 commit 5d9af63

20 files changed

Lines changed: 1256 additions & 1286 deletions

File tree

Documentation/tools/rtla/common_appendix.txt

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,10 @@ EXIT STATUS
2626

2727
::
2828

29-
0 Passed: the test did not hit the stop tracing condition
30-
1 Error: invalid argument
31-
2 Failed: the test hit the stop tracing condition
29+
0 Passed: the test did not hit the stop tracing condition
30+
1 Error: invalid argument
31+
2 Failed: the test hit the stop tracing condition
32+
129 Help: either user requested help or incorrect option was specified
3233

3334
REPORTING BUGS
3435
==============

tools/tracing/rtla/src/Build

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,4 +11,4 @@ rtla-y += timerlat_hist.o
1111
rtla-y += timerlat_u.o
1212
rtla-y += timerlat_aa.o
1313
rtla-y += timerlat_bpf.o
14-
rtla-y += rtla.o
14+
rtla-y += cli.o

0 commit comments

Comments
 (0)