Hi Thomas, Thanks for the review. I've addressed all the style issues and sent out PATCH v2.
On Mon, Jul 20, 2026 at 10:14 PM Thomas Gleixner <[email protected]> wrote: > > On Wed, Jul 08 2026 at 12:15, Wake Liu wrote: > > The posix_timers test compares the elapsed real time (GTOD) with the > > expected timer delay to verify if the timer expired. This works fine for > > real-time timers (ITIMER_REAL), but is flaky for CPU-time timers > > (ITIMER_PROF, ITIMER_VIRTUAL, and CLOCK_*_CPUTIME_ID) on loaded systems > > (like shared test runners) because the test process might be scheduled > > out, resulting in elapsed real time being larger than the consumed CPU > > time. > > > > Fix this by using the appropriate measurement method for each timer: > > - Use CPU process/thread time (via clock_gettime or getrusage) for CPU > > timers. > > - Keep using monotonic clock (real time) for real-time timers. > > > > This makes the test robust against scheduling delays. > > Lacks Signed-off-by .... > > > +#include <sys/resource.h> > > + > > +static long long get_clock_time_us(clockid_t clock_id) > > +{ > > + struct timespec ts; > > Newline between declaration and code. > > > + if (clock_gettime(clock_id, &ts) < 0) > > + return -1; > > + return (long long)ts.tv_sec * USECS_PER_SEC + ts.tv_nsec / 1000; > > +} > > + > > +static long long get_itimer_time_us(int which) > > +{ > > + struct rusage usage; > > + > > + switch (which) { > > + case ITIMER_REAL: > > + return get_clock_time_us(CLOCK_MONOTONIC); > > + case ITIMER_PROF: > > + return get_clock_time_us(CLOCK_PROCESS_CPUTIME_ID); > > + case ITIMER_VIRTUAL: > > + if (getrusage(RUSAGE_SELF, &usage) < 0) > > + return -1; > > + return (long long)usage.ru_utime.tv_sec * USECS_PER_SEC + > > usage.ru_utime.tv_usec; > > + default: > > + return -1; > > + } > > +} > > + > > +static int check_diff_us(long long start, long long end) > > { > > long long diff; > > > > - diff = end.tv_usec - start.tv_usec; > > - diff += (end.tv_sec - start.tv_sec) * USECS_PER_SEC; > > + diff = end - start; > > Move that to the declaration line. > > > if (llabs(diff - DELAY * USECS_PER_SEC) > USECS_PER_SEC / 2) { > > printf("Diff too high: %lld..", diff); > > @@ -100,7 +123,7 @@ static int check_diff(struct timeval start, struct > > timeval end) > > > > - if (gettimeofday(&end, NULL) < 0) > > - fatal_error(name, "gettimeofday()"); > > + end = get_clock_time_us(which); > > + if (end < 0) > > + fatal_error(name, "get_clock_time_us()"); > > > > - ksft_test_result(check_diff(start, end) == 0, > > + ksft_test_result(check_diff_us(start, end) == 0, > > "timer_create() per %s\n", name); > > Please get rid of the line break. > -- Best Regards, Wake Liu

