Re: [PATCH 1/3] selftests/futex: Migrate futex_wait to harness

From: André Almeida

Date: Mon May 25 2026 - 14:51:52 EST


Em 25/05/2026 06:20, Wake Liu escreveu:
Migrate futex_wait test to the kselftest harness framework,
removing mixed legacy ksft_* API usages and ensuring proper thread joining.


Why is this patchset not part of the same series that you just sent?

Signed-off-by: Wake Liu <wakel@xxxxxxxxxx>
---
.../selftests/futex/functional/futex_wait.c | 125 +++++++++++-------
1 file changed, 77 insertions(+), 48 deletions(-)

diff --git a/tools/testing/selftests/futex/functional/futex_wait.c b/tools/testing/selftests/futex/functional/futex_wait.c
index 7b8879409007..ed4b040600b8 100644
--- a/tools/testing/selftests/futex/functional/futex_wait.c
+++ b/tools/testing/selftests/futex/functional/futex_wait.c
@@ -9,6 +9,7 @@
#include <sys/shm.h>
#include <sys/mman.h>
#include <fcntl.h>
+#include <stdlib.h>
#include "futextest.h"
#include "kselftest_harness.h"
@@ -19,125 +20,153 @@
void *futex;
+struct waiter_args {
+ struct __test_metadata *_metadata;
+ unsigned int flags;
+};
+
static void *waiterfn(void *arg)
{
+ struct waiter_args *args = (struct waiter_args *)arg;
+ struct __test_metadata *_metadata = args->_metadata;

As much as I like the benefits of being able to properly use the harness macros in threads, I fell like we are touching private structs here. Are they safe to be used concurrently? If a child thread an the main thread fails, does that counts as two fails?

Perhaps we should have a look to create a kselftest wrapper for pthread_create().

struct timespec to;
- unsigned int flags = 0;
-
- if (arg)
- flags = *((unsigned int *) arg);
+ int res;
to.tv_sec = 0;
to.tv_nsec = timeout_ns;
- if (futex_wait(futex, 0, &to, flags))
- printf("waiter failed errno %d\n", errno);
+ res = futex_wait(futex, 0, &to, args->flags);
+ if (res) {
+ EXPECT_EQ(res, 0)

I have changed it to ASSERT_EQ(res, -1) just to see what happens when a child thread fails, but the test still reported PASSED: 3 / 3