From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-pg1-f202.google.com (mail-pg1-f202.google.com [209.85.215.202]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id DA9E83803D6 for ; Mon, 1 Jun 2026 06:51:38 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.215.202 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780296702; cv=none; b=EBACzOBYkDoaiUAPCpbZwlRKiziNxtQfdMQlgOClBmKkhOK/JXyle7h0Os5Mzlh9IPX3ffP10hntg9L1cdyr8dnx1CsxSBV2aTkeX35BzC9hkRpBCuHY6LZa2n2s/2Xsbh8toygWoVTv37kNO8oVV8tuILZWEKoxgeDfbzrXbjg= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780296702; c=relaxed/simple; bh=ABYUNeq5jggGjdHC1N3KhsSD1Eg+ZJUhKBpwrvEvOUg=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=fvU77Ik5nEdoIoRbHI2k3i9Ay0Vt3rK3ye/Pw6UBFmfVUcLEKl9en/bw2yAP5uzTNwmxB1xBJQ3ZLJjEoo54Hs70pXDdxrD5I5OPkYdj8BfdT0oDE95vMWl8yNp9fFnY80hJ2BLQsKjHDiQ0vNq65A//ozk9Mciw43KGlmrDWns= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--wakel.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=s0cnTx90; arc=none smtp.client-ip=209.85.215.202 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--wakel.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="s0cnTx90" Received: by mail-pg1-f202.google.com with SMTP id 41be03b00d2f7-c85a2cde332so525092a12.3 for ; Sun, 31 May 2026 23:51:38 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1780296698; x=1780901498; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=b8X/ZMOC3R4zjF20OsNMGuI7f1VgwjsLyl+ryXVYUmA=; b=s0cnTx90wrkqbuZnDDxRKzFeE3NxVCVIQX4STfYgTQkLGGC4ylet1nkp/G557KbSIg /rpghqFAYsdjFF4/8hfSrW+T31glYnZ489cX4j4HuS4iyokZc1qfFG525G+cogdGy+O7 qNsLHNKZe6nIC2SC1xgIWI3ktScnX48Nf7vU82ojMX2BDthNr8rdxhUDu8v0jU9nM4YL kGBIsBNjg6drgofNeeNhVd1CKQ8ZdcFeP7k2p7mqafKBinGYGXHYH99qRG+VEPppvPvw iw8lj7V5SJj0dnJnBdMuKPLAPdjGvpKmXIJLjhAtQWvup9Ov/9r2DWswycmgtqfmTGei JC0w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1780296698; x=1780901498; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=b8X/ZMOC3R4zjF20OsNMGuI7f1VgwjsLyl+ryXVYUmA=; b=ZaBagcNekt6KOy1PQ3i5cyG/fpILpjIdHF3tf1/8TK4Zk+Np7vmyhqc3IcWTBc0R+9 cncQ6LGyeY00fQmURORu1vQca9iKizRm9CzjmvJfIyKBGMI7RDdy6VHZnqGnGstIg51/ IgnlrjJn5xiwG0bIqL01qgTozMAxlsFHZq6tRCQNm1tOvLsKcfOh8luXIiGdLaoPnBaG oOc0GETLifp8lqSYgFpgBuCG1XCADRq5fchexwXiEkzWF6e8DXLbcU5sqm0QBgb7CRpH uEkSz8ygo7g4whlL3Qcm0wU5KXwbSRxj7xcPqnLRyljy86HiAmOkWznj3izD0uf/qXDe owFA== X-Forwarded-Encrypted: i=1; AFNElJ9K9LVjTUnDJQIXJsDEN+qPObeq4xAeA3vPuiMxU9gonSXna25PEx6nDYZDgklKyH9/UrydHHbY0s1UQf0=@vger.kernel.org X-Gm-Message-State: AOJu0YxZjoJIflfzt2IbM9nt81itjazryPnz++WD9OJQEndMxOMKCBQF NQFgtTAjeEKcugsOw59ze0PEa+1lsqe19nUMkbA3ETT1Betihn1mrlhf2igEqmHBSuCgOaNhCuP nFQ== X-Received: from pgbdw17.prod.google.com ([2002:a05:6a02:4491:b0:c0e:3543:bdb0]) (user=wakel job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a21:6497:b0:3a2:dabf:fef6 with SMTP id adf61e73a8af0-3b427f5b066mr9976790637.35.1780296697723; Sun, 31 May 2026 23:51:37 -0700 (PDT) Date: Mon, 1 Jun 2026 06:51:23 +0000 In-Reply-To: <20260601065126.3623867-1-wakel@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260601065126.3623867-1-wakel@google.com> X-Mailer: git-send-email 2.54.0.823.g6e5bcc1fc9-goog Message-ID: <20260601065126.3623867-5-wakel@google.com> Subject: [PATCH 4/7] selftests/futex: Migrate futex_requeue_pi_signal_restart to harness From: Wake Liu To: Thomas Gleixner , Ingo Molnar , Shuah Khan , linux-kselftest@vger.kernel.org Cc: Peter Zijlstra , Darren Hart , Davidlohr Bueso , "=?UTF-8?q?Andr=C3=A9=20Almeida?=" , Carlos Llamas , linux-kernel@vger.kernel.org, wakel@google.com Content-Type: text/plain; charset="UTF-8" Migrate futex_requeue_pi_signal_restart test to the kselftest harness framework, removing mixed legacy ksft_* API usages and ensuring proper thread joining. Signed-off-by: Wake Liu --- .../futex_requeue_pi_signal_restart.c | 67 +++++++++---------- 1 file changed, 31 insertions(+), 36 deletions(-) diff --git a/tools/testing/selftests/futex/functional/futex_requeue_pi_signal_restart.c b/tools/testing/selftests/futex/functional/futex_requeue_pi_signal_restart.c index a18ccae73eb1..e301beb4b202 100644 --- a/tools/testing/selftests/futex/functional/futex_requeue_pi_signal_restart.c +++ b/tools/testing/selftests/futex/functional/futex_requeue_pi_signal_restart.c @@ -35,9 +35,9 @@ futex_t f1 = FUTEX_INITIALIZER; futex_t f2 = FUTEX_INITIALIZER; atomic_t requeued = ATOMIC_INITIALIZER; -int waiter_ret = 0; +int waiter_ret; -int create_rt_thread(pthread_t *pth, void*(*func)(void *), void *arg, +int create_rt_thread(struct __test_metadata *_metadata, pthread_t *pth, void*(*func)(void *), void *arg, int policy, int prio) { struct sched_param schedp; @@ -48,45 +48,43 @@ int create_rt_thread(pthread_t *pth, void*(*func)(void *), void *arg, memset(&schedp, 0, sizeof(schedp)); ret = pthread_attr_setinheritsched(&attr, PTHREAD_EXPLICIT_SCHED); - if (ret) - ksft_exit_fail_msg("pthread_attr_setinheritsched\n"); + ASSERT_EQ(ret, 0) TH_LOG("pthread_attr_setinheritsched failed"); ret = pthread_attr_setschedpolicy(&attr, policy); - if (ret) - ksft_exit_fail_msg("pthread_attr_setschedpolicy\n"); + ASSERT_EQ(ret, 0) TH_LOG("pthread_attr_setschedpolicy failed"); schedp.sched_priority = prio; ret = pthread_attr_setschedparam(&attr, &schedp); - if (ret) - ksft_exit_fail_msg("pthread_attr_setschedparam\n"); + ASSERT_EQ(ret, 0) TH_LOG("pthread_attr_setschedparam failed"); ret = pthread_create(pth, &attr, func, arg); - if (ret) - ksft_exit_fail_msg("pthread_create\n"); + ASSERT_EQ(ret, 0) TH_LOG("pthread_create failed"); return 0; } void handle_signal(int signo) { - ksft_print_dbg_msg("signal received %s requeue\n", - requeued.val ? "after" : "prior to"); + printf("INFO: signal received %s requeue\n", + requeued.val ? "after" : "prior to"); } void *waiterfn(void *arg) { + struct __test_metadata *_metadata = (struct __test_metadata *)arg; unsigned int old_val; int res; - ksft_print_dbg_msg("Waiter running\n"); - ksft_print_dbg_msg("Calling FUTEX_LOCK_PI on f2=%x @ %p\n", f2, &f2); + TH_LOG("Waiter running"); + TH_LOG("Calling FUTEX_LOCK_PI on f2=%x @ %p", f2, &f2); old_val = f1; res = futex_wait_requeue_pi(&f1, old_val, &(f2), NULL, FUTEX_PRIVATE_FLAG); if (!requeued.val || errno != EWOULDBLOCK) { - ksft_test_result_fail("unexpected return from futex_wait_requeue_pi: %d (%s)\n", - res, strerror(errno)); - ksft_print_dbg_msg("w2:futex: %x\n", f2); + EXPECT_TRUE(0) + TH_LOG("unexpected return from futex_wait_requeue_pi: %d (%s)", + res, strerror(errno)); + TH_LOG("w2:futex: %x", f2); if (!res) futex_unlock_pi(&f2, FUTEX_PRIVATE_FLAG); } @@ -94,7 +92,6 @@ void *waiterfn(void *arg) pthread_exit(NULL); } - TEST(futex_requeue_pi_signal_restart) { unsigned int old_val; @@ -105,19 +102,16 @@ TEST(futex_requeue_pi_signal_restart) sa.sa_handler = handle_signal; sigemptyset(&sa.sa_mask); sa.sa_flags = 0; - if (sigaction(SIGUSR1, &sa, NULL)) - ksft_exit_fail_msg("sigaction\n"); + ASSERT_EQ(sigaction(SIGUSR1, &sa, NULL), 0) TH_LOG("sigaction failed"); - ksft_print_dbg_msg("m1:f2: %x\n", f2); - ksft_print_dbg_msg("Creating waiter\n"); - res = create_rt_thread(&waiter, waiterfn, NULL, SCHED_FIFO, 1); - if (res) - ksft_exit_fail_msg("Creating waiting thread failed"); + TH_LOG("m1:f2: %x", f2); + TH_LOG("Creating waiter"); + create_rt_thread(_metadata, &waiter, waiterfn, _metadata, SCHED_FIFO, 1); - ksft_print_dbg_msg("Calling FUTEX_LOCK_PI on f2=%x @ %p\n", f2, &f2); - ksft_print_dbg_msg("m2:f2: %x\n", f2); + TH_LOG("Calling FUTEX_LOCK_PI on f2=%x @ %p", f2, &f2); + TH_LOG("m2:f2: %x", f2); futex_lock_pi(&f2, 0, 0, FUTEX_PRIVATE_FLAG); - ksft_print_dbg_msg("m3:f2: %x\n", f2); + TH_LOG("m3:f2: %x", f2); while (1) { /* @@ -125,11 +119,11 @@ TEST(futex_requeue_pi_signal_restart) * restart futex_wait_requeue_pi() in the kernel. Wait for the * waiter to block on f1 again. */ - ksft_print_dbg_msg("Issuing SIGUSR1 to waiter\n"); + TH_LOG("Issuing SIGUSR1 to waiter"); pthread_kill(waiter, SIGUSR1); usleep(DELAY_US); - ksft_print_dbg_msg("Requeueing waiter via FUTEX_CMP_REQUEUE_PI\n"); + TH_LOG("Requeueing waiter via FUTEX_CMP_REQUEUE_PI"); old_val = f1; res = futex_cmp_requeue_pi(&f1, old_val, &(f2), 1, 0, FUTEX_PRIVATE_FLAG); @@ -143,10 +137,11 @@ TEST(futex_requeue_pi_signal_restart) atomic_set(&requeued, 1); break; } else if (res < 0) { - ksft_exit_fail_msg("FUTEX_CMP_REQUEUE_PI failed\n"); + ASSERT_GE(res, 0) + TH_LOG("FUTEX_CMP_REQUEUE_PI failed: %s", strerror(errno)); } } - ksft_print_dbg_msg("m4:f2: %x\n", f2); + TH_LOG("m4:f2: %x", f2); /* * Signal the waiter after requeue, waiter should return from @@ -154,14 +149,14 @@ TEST(futex_requeue_pi_signal_restart) * futex_unlock_pi() can't happen before the signal wakeup is detected * in the kernel. */ - ksft_print_dbg_msg("Issuing SIGUSR1 to waiter\n"); + TH_LOG("Issuing SIGUSR1 to waiter"); pthread_kill(waiter, SIGUSR1); - ksft_print_dbg_msg("Waiting for waiter to return\n"); + TH_LOG("Waiting for waiter to return"); pthread_join(waiter, NULL); - ksft_print_dbg_msg("Calling FUTEX_UNLOCK_PI on mutex=%x @ %p\n", f2, &f2); + TH_LOG("Calling FUTEX_UNLOCK_PI on mutex=%x @ %p", f2, &f2); futex_unlock_pi(&f2, FUTEX_PRIVATE_FLAG); - ksft_print_dbg_msg("m5:f2: %x\n", f2); + TH_LOG("m5:f2: %x", f2); } TEST_HARNESS_MAIN -- 2.54.0.823.g6e5bcc1fc9-goog