diff options
| author | Wake Liu <wakel@google.com> | 2026-06-01 06:51:20 +0000 |
|---|---|---|
| committer | Thomas Gleixner <tglx@kernel.org> | 2026-07-05 21:49:17 +0200 |
| commit | d0f7df9bb778bb68a3c91c58ea8190188b46f715 (patch) | |
| tree | 501c77aeb191aab41eab8b656db9a27a856ab6bc /tools | |
| parent | 78834d8b9c99a6e2e000bb4019498ee76336887e (diff) | |
| download | linux-d0f7df9bb778bb68a3c91c58ea8190188b46f715.tar.gz linux-d0f7df9bb778bb68a3c91c58ea8190188b46f715.zip | |
selftests/futex: Migrate futex_requeue to harness
Migrate futex_requeue test to the kselftest harness framework, removing
mixed legacy ksft_* API usages and ensuring proper thread joining.
[ tglx: Fixup coding style ]
Signed-off-by: Wake Liu <wakel@google.com>
Signed-off-by: Thomas Gleixner <tglx@kernel.org>
Link: https://patch.msgid.link/20260601065126.3623867-2-wakel@google.com
Diffstat (limited to 'tools')
| -rw-r--r-- | tools/testing/selftests/futex/functional/futex_requeue.c | 34 |
1 files changed, 24 insertions, 10 deletions
diff --git a/tools/testing/selftests/futex/functional/futex_requeue.c b/tools/testing/selftests/futex/functional/futex_requeue.c index dcf0d5f2f312..f4b8dc1eccf1 100644 --- a/tools/testing/selftests/futex/functional/futex_requeue.c +++ b/tools/testing/selftests/futex/functional/futex_requeue.c @@ -5,8 +5,9 @@ * futex cmp requeue test by André Almeida <andrealmeid@collabora.com> */ -#include <pthread.h> #include <limits.h> +#include <pthread.h> +#include <string.h> #include "futextest.h" #include "kselftest_harness.h" @@ -18,13 +19,18 @@ volatile futex_t *f1; void *waiterfn(void *arg) { + struct __test_metadata *_metadata = (struct __test_metadata *)arg; struct timespec to; + int res; to.tv_sec = 0; to.tv_nsec = timeout_ns; - if (futex_wait(f1, *f1, &to, 0)) - printf("waiter failed errno %d\n", errno); + res = futex_wait(f1, *f1, &to, 0); + if (res) { + EXPECT_EQ(res, 0) + TH_LOG("waiter failed errno %d: %s", errno, strerror(errno)); + } return NULL; } @@ -40,12 +46,15 @@ TEST(requeue_single) /* * Requeue a waiter from f1 to f2, and wake f2. */ - ASSERT_EQ(0, pthread_create(&waiter[0], NULL, waiterfn, NULL)); + ASSERT_EQ(pthread_create(&waiter[0], NULL, waiterfn, _metadata), 0) + TH_LOG("pthread_create failed"); usleep(WAKE_WAIT_US); - EXPECT_EQ(1, futex_cmp_requeue(f1, 0, &f2, 0, 1, 0)); - EXPECT_EQ(1, futex_wake(&f2, 1, 0)); + EXPECT_EQ(futex_cmp_requeue(f1, 0, &f2, 0, 1, 0), 1); + EXPECT_EQ(futex_wake(&f2, 1, 0), 1); + + pthread_join(waiter[0], NULL); } TEST(requeue_multiple) @@ -61,13 +70,18 @@ TEST(requeue_multiple) * Create 10 waiters at f1. At futex_requeue, wake 3 and requeue 7. * At futex_wake, wake INT_MAX (should be exactly 7). */ - for (i = 0; i < 10; i++) - ASSERT_EQ(0, pthread_create(&waiter[i], NULL, waiterfn, NULL)); + for (i = 0; i < 10; i++) { + ASSERT_EQ(pthread_create(&waiter[i], NULL, waiterfn, _metadata), 0) + TH_LOG("pthread_create failed for waiter %d", i); + } usleep(WAKE_WAIT_US); - EXPECT_EQ(10, futex_cmp_requeue(f1, 0, &f2, 3, 7, 0)); - EXPECT_EQ(7, futex_wake(&f2, INT_MAX, 0)); + EXPECT_EQ(futex_cmp_requeue(f1, 0, &f2, 3, 7, 0), 10); + EXPECT_EQ(futex_wake(&f2, INT_MAX, 0), 7); + + for (i = 0; i < 10; i++) + pthread_join(waiter[i], NULL); } TEST_HARNESS_MAIN |
