* [PATCH] selftests: rtc: Support harness test filtering and arguments
@ 2026-09-10 3:48 Wake Liu
2026-09-10 3:53 ` sashiko-bot
` (3 more replies)
0 siblings, 4 replies; 6+ messages in thread
From: Wake Liu @ 2026-09-10 3:48 UTC (permalink / raw)
To: Alexandre Belloni, Shuah Khan
Cc: linux-rtc, linux-kselftest, linux-kernel, Wake Liu
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 <wakel@google.com>
---
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
^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [PATCH] selftests: rtc: Support harness test filtering and arguments
2026-09-10 3:48 [PATCH] selftests: rtc: Support harness test filtering and arguments Wake Liu
@ 2026-09-10 3:53 ` sashiko-bot
2026-09-21 19:31 ` Alexandre Belloni
` (2 subsequent siblings)
3 siblings, 0 replies; 6+ messages in thread
From: sashiko-bot @ 2026-09-10 3:53 UTC (permalink / raw)
To: Wake Liu; +Cc: Alexandre Belloni, linux-rtc
> 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 <wakel@google.com>
Sashiko has reviewed this patch and found no issues. It looks great!
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260910034821.2935214-1-wakel@google.com?part=1
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH] selftests: rtc: Support harness test filtering and arguments
2026-09-10 3:48 [PATCH] selftests: rtc: Support harness test filtering and arguments Wake Liu
2026-09-10 3:53 ` sashiko-bot
@ 2026-09-21 19:31 ` Alexandre Belloni
2026-10-11 10:41 ` Wake Liu
2026-11-05 3:08 ` [PATCH v2] " Wake Liu
3 siblings, 0 replies; 6+ messages in thread
From: Alexandre Belloni @ 2026-09-21 19:31 UTC (permalink / raw)
To: Wake Liu; +Cc: Shuah Khan, linux-rtc, linux-kselftest, linux-kernel
On 10/09/2026 03:48:21+0000, Wake Liu wrote:
> 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 <wakel@google.com>
Acked-by: Alexandre Belloni <alexandre.belloni@bootlin.com>
--
Alexandre Belloni, co-owner and COO, Bootlin
Embedded Linux and Kernel engineering
https://bootlin.com
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH] selftests: rtc: Support harness test filtering and arguments
2026-09-10 3:48 [PATCH] selftests: rtc: Support harness test filtering and arguments Wake Liu
2026-09-10 3:53 ` sashiko-bot
2026-09-21 19:31 ` Alexandre Belloni
@ 2026-10-11 10:41 ` Wake Liu
2026-11-05 3:08 ` [PATCH v2] " Wake Liu
3 siblings, 0 replies; 6+ messages in thread
From: Wake Liu @ 2026-10-11 10:41 UTC (permalink / raw)
To: Shuah Khan, Shuah Khan, Alexandre Belloni
Cc: linux-rtc, linux-kselftest, linux-kernel
Hi Shuah,
Gentle ping on this patch. Alexandre has acked it from the RTC
side [1], and it still applies cleanly on top of both
kselftest/next and v7.3-rc6.
With this change, rtctest accepts the standard kselftest harness
options, so a test runner can select a subset of the cases with
e.g. "rtctest -t date_read -t date_read_loop". This would let
Android VTS drop a local #ifdef that it currently carries in
rtctest.c.
There is no rush; picking it up for the next cycle is perfectly
fine. Alexandre, if you would rather take it through the rtc tree,
that works for me as well.
FWIW, the pending date_read_loop fix [2] touches the same file.
The two patches are independent and apply in either order.
[1] https://lore.kernel.org/all/2026092119312953871857@mail.local/
[2] https://lore.kernel.org/all/20260929152212.2092062-1-wakel@google.com/
Thanks,
Wake
^ permalink raw reply [flat|nested] 6+ messages in thread
* [PATCH v2] selftests: rtc: Support harness test filtering and arguments
2026-09-10 3:48 [PATCH] selftests: rtc: Support harness test filtering and arguments Wake Liu
` (2 preceding siblings ...)
2026-10-11 10:41 ` Wake Liu
@ 2026-11-05 3:08 ` Wake Liu
2026-11-05 3:15 ` sashiko-bot
3 siblings, 1 reply; 6+ messages in thread
From: Wake Liu @ 2026-11-05 3:08 UTC (permalink / raw)
To: Alexandre Belloni, Shuah Khan
Cc: Shuah Khan, linux-rtc, linux-kselftest, linux-kernel, Wake Liu
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 <wakel@google.com>
Acked-by: Alexandre Belloni <alexandre.belloni@bootlin.com>
---
v2:
- Rebased onto v7.4-rc1, no code changes.
- Added Alexandre's Acked-by.
Alexandre, the other rtctest changes for v7.4 went through the RTC
tree. Would you be willing to queue this one there as well? Shuah,
please let me know if you would rather take it via kselftest.
v1: https://lore.kernel.org/all/20260910034821.2935214-1-wakel@google.com/
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 552191fe1ca0..eb26d957835d 100644
--- a/tools/testing/selftests/rtc/rtctest.c
+++ b/tools/testing/selftests/rtc/rtctest.c
@@ -487,18 +487,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);
base-commit: 6628e7d4c6b25c8d18f1345e3a20d21829aae7e4
--
2.56.0.398.g882cbad275-goog
^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [PATCH v2] selftests: rtc: Support harness test filtering and arguments
2026-11-05 3:08 ` [PATCH v2] " Wake Liu
@ 2026-11-05 3:15 ` sashiko-bot
0 siblings, 0 replies; 6+ messages in thread
From: sashiko-bot @ 2026-11-05 3:15 UTC (permalink / raw)
To: Wake Liu; +Cc: linux-rtc, Alexandre Belloni
Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider:
- [Medium] selftests: rtc: incomplete getopt() reset on -h/-l in main()
--
commit 9bed5ee7eee853de78b5dce8eb5280f5ed1c8688
Author: Wake Liu <wakel@google.com>
selftests: rtc: Support harness test filtering and arguments
This commit updates main() in rtctest.c to parse command-line options with
getopt() so kselftest harness flags can be passed alongside the optional RTC
device node path.
> diff --git a/tools/testing/selftests/rtc/rtctest.c b/tools/testing/selftests/rtc/rtctest.c
> index 552191fe1ca09..eb26d957835d7 100644
> --- a/tools/testing/selftests/rtc/rtctest.c
> +++ b/tools/testing/selftests/rtc/rtctest.c
> @@ -487,18 +487,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);
[Severity: Medium]
What happens if -h or -l is passed as the first flag in a clustered short
option argument (such as -hd or -ld)?
When getopt() parses the first character in argv[1], optind is still 1 and
getopt()'s internal within-argument character cursor points to the second
character ('d'). Returning early from inside the getopt() loop after setting
optind = 1 does not reset that internal cursor when getopt() has not finished
consuming the current argument.
When main() calls test_harness_run() -> test_harness_argv_check():
tools/testing/selftests/kselftest_harness.h:test_harness_argv_check() {
...
while ((opt = getopt(argc, argv, "dhlF:f:V:v:t:T:r:")) != -1) {
switch (opt) {
...
case 'h':
test_harness_usage(argv[0]);
return KSFT_FAIL;
case 'l':
__test_harness_list_tests();
return KSFT_FAIL;
...
}
}
return KSFT_PASS;
}
getopt() in test_harness_argv_check() resumes at 'd' instead of re-reading
'h' or 'l', returns KSFT_PASS, and runs the full RTC test suite (while also
having bypassed the access(rtc_file, R_OK) check in main()).
Would it be better to let the getopt() loop finish scanning all options (for
example by recording a flag for -h/-l or resetting optind = 0 where supported)
before calling test_harness_run()?
--
Sashiko AI review · https://sashiko.dev/#/patchset/20261105030834.3318480-1-wakel@google.com?part=1
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2026-11-05 3:15 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-09-10 3:48 [PATCH] selftests: rtc: Support harness test filtering and arguments Wake Liu
2026-09-10 3:53 ` sashiko-bot
2026-09-21 19:31 ` Alexandre Belloni
2026-10-11 10:41 ` Wake Liu
2026-11-05 3:08 ` [PATCH v2] " Wake Liu
2026-11-05 3:15 ` sashiko-bot
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox