On 04/11, Thomas Gleixner wrote: > > On Thu, Apr 11 2024 at 13:44, Mark Brown wrote: > > > > Further to my previous mail it's also broken the arm64 selftest builds, > > they use kselftest.h with nolibc in order to test low level > > functionality mainly used by libc implementations and nolibc doesn't > > implement uname(): > > > > In file included from za-fork.c:12: > > ../../kselftest.h:433:17: error: variable has incomplete type 'struct utsname' > > struct utsname info; > > ^ > > ../../kselftest.h:433:9: note: forward declaration of 'struct utsname' > > struct utsname info; > > ^ > > ../../kselftest.h:435:6: error: call to undeclared function 'uname'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration] > > if (uname(&info) || sscanf(info.release, "%u.%u.", &major, &minor) != 2) > > ^ > > ../../kselftest.h:435:22: error: call to undeclared function 'sscanf'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration] > > if (uname(&info) || sscanf(info.release, "%u.%u.", &major, &minor) != 2) > > Grrr. Let me stare at this. Damn ;) Can't we just turn ksft_min_kernel_version() into static inline int ksft_min_kernel_version(unsigned int min_major, unsigned int min_minor) { #ifdef NOLIBC return -1; #else unsigned int major, minor; struct utsname info; if (uname(&info) || sscanf(info.release, "%u.%u.", &major, &minor) != 2) ksft_exit_fail_msg("Can't parse kernel version\n"); return major > min_major || (major == min_major && minor >= min_minor); #endif } ? Not sure what should check_timer_distribution() do in this case, to me ksft_test_result_fail() is fine. Oleg.