]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
selftests/timers: Clean up kernel version check in posix_timers
authorWake Liu <wakel@google.com>
Mon, 3 Nov 2025 11:45:02 +0000 (19:45 +0800)
committerThomas Gleixner <tglx@linutronix.de>
Fri, 14 Nov 2025 19:34:50 +0000 (20:34 +0100)
Several tests in the posix_timers selftest which test timer behavior
related to SIG_IGN fail on kernels older than 6.13. This is due to
a refactoring of signal handling in commit caf77435dd8a ("signal:
Handle ignored signals in do_sigaction(action != SIG_IGN)").

A previous attempt to fix this by adding a kernel version check to each
of the nine affected tests was suboptimal, as it resulted in emitting
the same skip message nine times.

Following the suggestion from Thomas Gleixner, this is refactored to
perform a single version check in main(). To satisfy the kselftest
framework's requirement for the test count to match the declared plan,
the plan is now conditionally set to 10 (for older kernels) or 19.

While setting the plan conditionally may seem complex, it is the
better approach to avoid the alternatives: either running tests on
unsupported kernels that are known to fail, or emitting a noisy series
of nine identical skip messages. A single informational message is now
printed instead when the tests are skipped.

Signed-off-by: Wake Liu <wakel@google.com>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Link: https://lore.kernel.org/all/20250807085042.1690931-1-wakel@google.com/
Link: https://patch.msgid.link/20251103114502.584940-1-wakel@google.com
tools/testing/selftests/timers/posix_timers.c

index f0eceb0faf34fb560e09405b44b0dc8f384055f4..a563c438ac79e244745564fb2c5ce76686f75062 100644 (file)
@@ -18,6 +18,7 @@
 #include <time.h>
 #include <include/vdso/time64.h>
 #include <pthread.h>
+#include <stdbool.h>
 
 #include "../kselftest.h"
 
@@ -670,8 +671,14 @@ static void check_timer_create_exact(void)
 
 int main(int argc, char **argv)
 {
+       bool run_sig_ign_tests = ksft_min_kernel_version(6, 13);
+
        ksft_print_header();
-       ksft_set_plan(19);
+       if (run_sig_ign_tests) {
+               ksft_set_plan(19);
+       } else {
+               ksft_set_plan(10);
+       }
 
        ksft_print_msg("Testing posix timers. False negative may happen on CPU execution \n");
        ksft_print_msg("based timers if other threads run on the CPU...\n");
@@ -695,15 +702,20 @@ int main(int argc, char **argv)
        check_timer_create(CLOCK_PROCESS_CPUTIME_ID, "CLOCK_PROCESS_CPUTIME_ID");
        check_timer_distribution();
 
-       check_sig_ign(0);
-       check_sig_ign(1);
-       check_rearm();
-       check_delete();
-       check_sigev_none(CLOCK_MONOTONIC, "CLOCK_MONOTONIC");
-       check_sigev_none(CLOCK_PROCESS_CPUTIME_ID, "CLOCK_PROCESS_CPUTIME_ID");
-       check_gettime(CLOCK_MONOTONIC, "CLOCK_MONOTONIC");
-       check_gettime(CLOCK_PROCESS_CPUTIME_ID, "CLOCK_PROCESS_CPUTIME_ID");
-       check_gettime(CLOCK_THREAD_CPUTIME_ID, "CLOCK_THREAD_CPUTIME_ID");
+       if (run_sig_ign_tests) {
+               check_sig_ign(0);
+               check_sig_ign(1);
+               check_rearm();
+               check_delete();
+               check_sigev_none(CLOCK_MONOTONIC, "CLOCK_MONOTONIC");
+               check_sigev_none(CLOCK_PROCESS_CPUTIME_ID, "CLOCK_PROCESS_CPUTIME_ID");
+               check_gettime(CLOCK_MONOTONIC, "CLOCK_MONOTONIC");
+               check_gettime(CLOCK_PROCESS_CPUTIME_ID, "CLOCK_PROCESS_CPUTIME_ID");
+               check_gettime(CLOCK_THREAD_CPUTIME_ID, "CLOCK_THREAD_CPUTIME_ID");
+       } else {
+               ksft_print_msg("Skipping SIG_IGN tests on kernel < 6.13\n");
+       }
+
        check_overrun(CLOCK_MONOTONIC, "CLOCK_MONOTONIC");
        check_overrun(CLOCK_PROCESS_CPUTIME_ID, "CLOCK_PROCESS_CPUTIME_ID");
        check_overrun(CLOCK_THREAD_CPUTIME_ID, "CLOCK_THREAD_CPUTIME_ID");