[PATCH] selftests: rtc: Support harness test filtering and arguments
From: Wake Liu <hidden>
Date: 2026-09-10 03:48:25
Also in:
linux-kselftest, lkml
Subsystem:
kernel selftest framework, real time clock (rtc) subsystem, the rest · Maintainers:
Shuah Khan, Shuah Khan, Alexandre Belloni, Linus Torvalds
rtctest implements its own main() function with a rigid switch (argc) check that only accepts an optional single argument for the RTC device node path. This prevents kselftest_harness standard arguments from working properly: 1. Passing filter options like -t <name> or -T <name> triggers a usage error because argc is greater than 2. 2. Passing -l or -h causes rtctest to treat "-l" or "-h" as the device node path and fail with access() errors before ever reaching the harness argument checker. Parse command line arguments with getopt() to pass all kselftest harness options (such as -t, -T, -v, -V, -f, -F, -r, -d, -h, and -l) through to test_harness_run(), while preserving the ability to specify an optional RTC device node path as a non-option argument. Also ensure optind is reset before invoking test_harness_run() so the harness can inspect the options, and bypass device accessibility checks when help or test listing is requested. Signed-off-by: Wake Liu <redacted> --- tools/testing/selftests/rtc/rtctest.c | 44 +++++++++++++++++++++------ 1 file changed, 35 insertions(+), 9 deletions(-)
diff --git a/tools/testing/selftests/rtc/rtctest.c b/tools/testing/selftests/rtc/rtctest.c
index 8047d9879039..57dda87ba813 100644
--- a/tools/testing/selftests/rtc/rtctest.c
+++ b/tools/testing/selftests/rtc/rtctest.c@@ -486,18 +486,44 @@ TEST_F_TIMEOUT(rtc, alarm_wkalm_set_minute, 65) { int main(int argc, char **argv) { int ret = -1; + int opt, i; + int non_opt = 0; + + while ((opt = getopt(argc, argv, "dhlF:f:V:v:t:T:r:")) != -1) { + switch (opt) { + case 'h': + fprintf(stderr, + "Usage: %s [-h|-l|-d] [-t|-T|-v|-V|-f|-F|-r name] [rtcdev]\n\n", + argv[0]); + optind = 1; + return test_harness_run(argc, argv); + case 'l': + optind = 1; + return test_harness_run(argc, argv); + case '?': + fprintf(stderr, + "Usage: %s [-h|-l|-d] [-t|-T|-v|-V|-f|-F|-r name] [rtcdev]\n", + argv[0]); + return KSFT_FAIL; + default: + break; + } + } - switch (argc) { - case 2: - rtc_file = argv[1]; - /* FALLTHROUGH */ - case 1: - break; - default: - fprintf(stderr, "usage: %s [rtcdev]\n", argv[0]); - return 1; + for (i = optind; i < argc; i++) { + if (non_opt == 0) { + rtc_file = argv[i]; + non_opt++; + } else { + fprintf(stderr, + "Usage: %s [-h|-l|-d] [-t|-T|-v|-V|-f|-F|-r name] [rtcdev]\n", + argv[0]); + return KSFT_FAIL; + } } + optind = 1; + /* Run the test if rtc_file is accessible */ if (access(rtc_file, R_OK) == 0) ret = test_harness_run(argc, argv);
--
2.55.0.979.g7e5102b832-goog