* [PATCH] selftests/futex: Skip futex_waitv tests if ENOSYS
@ 2025-08-07 14:55 Wake Liu
2025-08-08 7:15 ` [PATCH v2] " Wake Liu
0 siblings, 1 reply; 4+ messages in thread
From: Wake Liu @ 2025-08-07 14:55 UTC (permalink / raw)
To: Thomas Gleixner, Ingo Molnar, Shuah Khan, linux-kernel,
linux-kselftest
Cc: Peter Zijlstra, Darren Hart, Davidlohr Bueso, André Almeida,
wakel
The futex_waitv() syscall was introduced in Linux 5.16. The existing
test in futex_wait_timeout.c will fail on kernels older than 5.16
due to the syscall not being implemented.
Modify the test_timeout() function to check if the error returned
is ENOSYS. If it is, skip the test and report it as such, rather than
failing. This ensures the selftests can be run on a wider range of
kernel versions without false negatives.
Signed-off-by: Wake Liu <wakel@google.com>
---
.../selftests/futex/functional/futex_wait_timeout.c | 11 ++++++++---
.../testing/selftests/futex/functional/futex_waitv.c | 8 ++++++++
2 files changed, 16 insertions(+), 3 deletions(-)
diff --git a/tools/testing/selftests/futex/functional/futex_wait_timeout.c b/tools/testing/selftests/futex/functional/futex_wait_timeout.c
index d183f878360b..323cab339814 100644
--- a/tools/testing/selftests/futex/functional/futex_wait_timeout.c
+++ b/tools/testing/selftests/futex/functional/futex_wait_timeout.c
@@ -64,9 +64,14 @@ void *get_pi_lock(void *arg)
static void test_timeout(int res, int *ret, char *test_name, int err)
{
if (!res || errno != err) {
- ksft_test_result_fail("%s returned %d\n", test_name,
- res < 0 ? errno : res);
- *ret = RET_FAIL;
+ if (errno == ENOSYS) {
+ ksft_test_result_skip("%s: %s\n",
+ test_name, strerror(errno));
+ } else {
+ ksft_test_result_fail("%s returned %d\n", test_name,
+ res < 0 ? errno : res);
+ *ret = RET_FAIL;
+ }
} else {
ksft_test_result_pass("%s succeeds\n", test_name);
}
diff --git a/tools/testing/selftests/futex/functional/futex_waitv.c b/tools/testing/selftests/futex/functional/futex_waitv.c
index 034dbfef40cb..2a86fd3ea657 100644
--- a/tools/testing/selftests/futex/functional/futex_waitv.c
+++ b/tools/testing/selftests/futex/functional/futex_waitv.c
@@ -59,6 +59,14 @@ void *waiterfn(void *arg)
int main(int argc, char *argv[])
{
+ if (!ksft_min_kernel_version(5, 16)) {
+ ksft_print_header();
+ ksft_set_plan(0);
+ ksft_print_msg("%s: FUTEX_WAITV not implemented until 5.16\n",
+ basename(argv[0]));
+ ksft_print_cnts();
+ return KSFT_SKIP;
+ }
pthread_t waiter;
int res, ret = RET_PASS;
struct timespec to;
--
2.50.1.703.g449372360f-goog
^ permalink raw reply related [flat|nested] 4+ messages in thread
* [PATCH v2] selftests/futex: Skip futex_waitv tests if ENOSYS
2025-08-07 14:55 [PATCH] selftests/futex: Skip futex_waitv tests if ENOSYS Wake Liu
@ 2025-08-08 7:15 ` Wake Liu
2025-08-08 22:36 ` André Almeida
0 siblings, 1 reply; 4+ messages in thread
From: Wake Liu @ 2025-08-08 7:15 UTC (permalink / raw)
To: Thomas Gleixner, Ingo Molnar, Shuah Khan
Cc: Peter Zijlstra, Darren Hart, Davidlohr Bueso, André Almeida,
Wake Liu, linux-kernel, linux-kselftest
The futex_waitv() syscall was introduced in Linux 5.16. The existing
test in futex_wait_timeout.c will fail on kernels older than 5.16
due to the syscall not being implemented.
Modify the test_timeout() function to check if the error returned
is ENOSYS. If it is, skip the test and report it as such, rather than
failing. This ensures the selftests can be run on a wider range of
kernel versions without false negatives.
Signed-off-by: Wake Liu <wakel@google.com>
---
.../selftests/futex/functional/futex_wait_timeout.c | 10 +++++++---
tools/testing/selftests/futex/functional/futex_waitv.c | 8 ++++++++
2 files changed, 15 insertions(+), 3 deletions(-)
diff --git a/tools/testing/selftests/futex/functional/futex_wait_timeout.c b/tools/testing/selftests/futex/functional/futex_wait_timeout.c
index d183f878360b..8a48cf5d235f 100644
--- a/tools/testing/selftests/futex/functional/futex_wait_timeout.c
+++ b/tools/testing/selftests/futex/functional/futex_wait_timeout.c
@@ -64,9 +64,13 @@ void *get_pi_lock(void *arg)
static void test_timeout(int res, int *ret, char *test_name, int err)
{
if (!res || errno != err) {
- ksft_test_result_fail("%s returned %d\n", test_name,
- res < 0 ? errno : res);
- *ret = RET_FAIL;
+ if (errno == ENOSYS) {
+ ksft_test_result_skip("%s: %m\n", test_name);
+ } else {
+ ksft_test_result_fail("%s returned %d\n", test_name,
+ res < 0 ? errno : res);
+ *ret = RET_FAIL;
+ }
} else {
ksft_test_result_pass("%s succeeds\n", test_name);
}
diff --git a/tools/testing/selftests/futex/functional/futex_waitv.c b/tools/testing/selftests/futex/functional/futex_waitv.c
index 034dbfef40cb..2a86fd3ea657 100644
--- a/tools/testing/selftests/futex/functional/futex_waitv.c
+++ b/tools/testing/selftests/futex/functional/futex_waitv.c
@@ -59,6 +59,14 @@ void *waiterfn(void *arg)
int main(int argc, char *argv[])
{
+ if (!ksft_min_kernel_version(5, 16)) {
+ ksft_print_header();
+ ksft_set_plan(0);
+ ksft_print_msg("%s: FUTEX_WAITV not implemented until 5.16\n",
+ basename(argv[0]));
+ ksft_print_cnts();
+ return KSFT_SKIP;
+ }
pthread_t waiter;
int res, ret = RET_PASS;
struct timespec to;
--
2.50.1.703.g449372360f-goog
^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [PATCH v2] selftests/futex: Skip futex_waitv tests if ENOSYS
2025-08-08 7:15 ` [PATCH v2] " Wake Liu
@ 2025-08-08 22:36 ` André Almeida
2025-08-09 8:32 ` Wake Liu
0 siblings, 1 reply; 4+ messages in thread
From: André Almeida @ 2025-08-08 22:36 UTC (permalink / raw)
To: Wake Liu
Cc: Peter Zijlstra, Shuah Khan, Ingo Molnar, Thomas Gleixner,
Darren Hart, Davidlohr Bueso, linux-kernel, linux-kselftest
Hi Wake Liu,
Em 08/08/2025 04:15, Wake Liu escreveu:
> The futex_waitv() syscall was introduced in Linux 5.16. The existing
> test in futex_wait_timeout.c will fail on kernels older than 5.16
> due to the syscall not being implemented.
>
> Modify the test_timeout() function to check if the error returned
> is ENOSYS. If it is, skip the test and report it as such, rather than
> failing. This ensures the selftests can be run on a wider range of
> kernel versions without false negatives.
>
> Signed-off-by: Wake Liu <wakel@google.com>
> ---
> .../selftests/futex/functional/futex_wait_timeout.c | 10 +++++++---
> tools/testing/selftests/futex/functional/futex_waitv.c | 8 ++++++++
tools/testing/selftests/futex/functional/futex_wait_wouldblock.c also
have a call for futex_waitv().
Apart from that, futex2_wait() and futex2_wake() syscalls may need
something similar?
^ permalink raw reply [flat|nested] 4+ messages in thread
* [PATCH v2] selftests/futex: Skip futex_waitv tests if ENOSYS
2025-08-08 22:36 ` André Almeida
@ 2025-08-09 8:32 ` Wake Liu
0 siblings, 0 replies; 4+ messages in thread
From: Wake Liu @ 2025-08-09 8:32 UTC (permalink / raw)
To: Thomas Gleixner, Ingo Molnar, Peter Zijlstra, Darren Hart,
Davidlohr Bueso, André Almeida, Shuah Khan, Wake Liu,
Edward Liaw
Cc: linux-kernel, linux-kselftest
The futex_waitv() syscall was introduced in Linux 5.16. The existing
test in futex_wait_timeout.c will fail on kernels older than 5.16
due to the syscall not being implemented.
Modify the test_timeout() function to check if the error returned
is ENOSYS. If it is, skip the test and report it as such, rather than
failing. This ensures the selftests can be run on a wider range of
kernel versions without false negatives.
Signed-off-by: Wake Liu <wakel@google.com>
---
+V1 -> V2:
+- Addressed review comments from André Almeida.
+- Applied ENOSYS check to futex_wait_wouldblock.c as well.
---
.../selftests/futex/functional/futex_wait_timeout.c | 10 +++++++---
.../futex/functional/futex_wait_wouldblock.c | 12 ++++++++----
.../testing/selftests/futex/functional/futex_waitv.c | 8 ++++++++
3 files changed, 23 insertions(+), 7 deletions(-)
diff --git a/tools/testing/selftests/futex/functional/futex_wait_timeout.c b/tools/testing/selftests/futex/functional/futex_wait_timeout.c
index d183f878360b..8a48cf5d235f 100644
--- a/tools/testing/selftests/futex/functional/futex_wait_timeout.c
+++ b/tools/testing/selftests/futex/functional/futex_wait_timeout.c
@@ -64,9 +64,13 @@ void *get_pi_lock(void *arg)
static void test_timeout(int res, int *ret, char *test_name, int err)
{
if (!res || errno != err) {
- ksft_test_result_fail("%s returned %d\n", test_name,
- res < 0 ? errno : res);
- *ret = RET_FAIL;
+ if (errno == ENOSYS) {
+ ksft_test_result_skip("%s: %m\n", test_name);
+ } else {
+ ksft_test_result_fail("%s returned %d\n", test_name,
+ res < 0 ? errno : res);
+ *ret = RET_FAIL;
+ }
} else {
ksft_test_result_pass("%s succeeds\n", test_name);
}
diff --git a/tools/testing/selftests/futex/functional/futex_wait_wouldblock.c b/tools/testing/selftests/futex/functional/futex_wait_wouldblock.c
index 2d8230da9064..5e85ebb33e62 100644
--- a/tools/testing/selftests/futex/functional/futex_wait_wouldblock.c
+++ b/tools/testing/selftests/futex/functional/futex_wait_wouldblock.c
@@ -98,10 +98,14 @@ int main(int argc, char *argv[])
info("Calling futex_waitv on f1: %u @ %p with val=%u\n", f1, &f1, f1+1);
res = futex_waitv(&waitv, 1, 0, &to, CLOCK_MONOTONIC);
if (!res || errno != EWOULDBLOCK) {
- ksft_test_result_fail("futex_waitv returned: %d %s\n",
- res ? errno : res,
- res ? strerror(errno) : "");
- ret = RET_FAIL;
+ if (errno == ENOSYS) {
+ ksft_test_result_skip("futex_waitv: %m\n");
+ } else {
+ ksft_test_result_fail("futex_waitv returned: %d %s\n",
+ res ? errno : res,
+ res ? strerror(errno) : "");
+ ret = RET_FAIL;
+ }
} else {
ksft_test_result_pass("futex_waitv\n");
}
diff --git a/tools/testing/selftests/futex/functional/futex_waitv.c b/tools/testing/selftests/futex/functional/futex_waitv.c
index a94337f677e1..84eec26910bb 100644
--- a/tools/testing/selftests/futex/functional/futex_waitv.c
+++ b/tools/testing/selftests/futex/functional/futex_waitv.c
@@ -59,6 +59,14 @@ void *waiterfn(void *arg)
int main(int argc, char *argv[])
{
+ if (!ksft_min_kernel_version(5, 16)) {
+ ksft_print_header();
+ ksft_set_plan(0);
+ ksft_print_msg("%s: FUTEX_WAITV not implemented until 5.16\n",
+ basename(argv[0]));
+ ksft_print_cnts();
+ return KSFT_SKIP;
+ }
pthread_t waiter;
int res, ret = RET_PASS;
struct timespec to;
--
2.50.1.703.g449372360f-goog
^ permalink raw reply related [flat|nested] 4+ messages in thread
end of thread, other threads:[~2025-08-09 8:32 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-08-07 14:55 [PATCH] selftests/futex: Skip futex_waitv tests if ENOSYS Wake Liu
2025-08-08 7:15 ` [PATCH v2] " Wake Liu
2025-08-08 22:36 ` André Almeida
2025-08-09 8:32 ` Wake Liu
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).