On Thu, Nov 13, 2025, at 16:30, Thomas Weißschuh wrote:

> 
>  static void test_one_clock_gettime(int clock, const char *name)
>  {
> +     struct __kernel_timespec start, end;
>       struct __kernel_old_timespec vdso;
> -     struct timespec start, end;
>       int vdso_ret, end_ret;
> 
>       printf("[RUN]\tTesting clock_gettime for clock %s (%d)...\n", name, 

This looks confusing to me: I can see that the existing code is
wrong because it passes a (libc-defined) timespec into the
sys_clock_gettime() that expects __kernel_old_timespec.

It looks like you are changing a sometimes-wrong type into
a consistently wrong type, but then you also change the
sys_clock_gettime() definition to return __kernel_timespec
instead of __kernel_old_timespec, so it ends up working.

Why not always use __kernel_old_timespec for the local variables
and the sys_clock_gettime() calls here?

> @@ -305,7 +291,7 @@ static void test_one_clock_gettime64(int clock, const 
> char *name)
> 
>       printf("[RUN]\tTesting clock_gettime64 for clock %s (%d)...\n", name, 
> clock);
> 
> -     if (sys_clock_gettime64(clock, &start) < 0) {
> +     if (sys_clock_gettime(clock, &start) < 0) {
>               if (errno == EINVAL) {
>                       vdso_ret = VDSO_CALL(vdso_clock_gettime64, 2, clock, 
> &vdso);
>                       if (vdso_ret == -EINVAL) {

This looks like the correct fix to me. We were already uses the same
types for syscall and vdso paths, and now the types match the interface.

     Arnd

Reply via email to