On Tue, Apr 9, 2024 at 6:39 AM Oleg Nesterov <oleg@xxxxxxxxxx> wrote: > > Thomas says: > > The signal distribution test has a tendency to hang for a long > time as the signal delivery is not really evenly distributed. In > fact it might never be distributed across all threads ever in > the way it is written. > > To me even the > > This primarily tests that the kernel does not favour any one. > > comment doesn't look right. The kernel does favour a thread which hits > the timer interrupt when CLOCK_PROCESS_CPUTIME_ID expires. > > The new version simply checks that the group leader sleeping in join() > never receives SIGALRM, cpu_timer_fire() should always send the signal > to the thread which burns cpu. > > Without the commit bcb7ee79029d ("posix-timers: Prefer delivery of signals > to the current thread") the test-case fails immediately, the very 1st tick > wakes the leader up. Otherwise it quickly succeeds after 100 ticks. > > As Thomas suggested, the new version doesn't report the failure on the > pre v6.3 kernels that do not have the commit bcb7ee79029d; this is a > feature that obviously fails on the older kernels. So the patch adds the > new simple ksft_ck_kernel_version() helper and uses ksft_test_result_skip() > if check_timer_distribution() fails on the older kernel. > > Signed-off-by: Oleg Nesterov <oleg@xxxxxxxxxx> This is working great here (on both 6.6 and the older 6.1)! Thanks so much for fixing this! One nit below, but otherwise: Tested-by: John Stultz <jstultz@xxxxxxxxxx> > +err: > + ksft_print_msg(errmsg); This bit is causing the following warning: posix_timers.c:250:2: warning: format not a string literal and no format arguments [-Wformat-security] 250 | ksft_print_msg(errmsg); | ^~~~~~~~~~~~~~ A simple fix is just to switch it to: ksft_print_msg("%s", errmsg); thanks -john