mirror of
https://github.com/torvalds/linux.git
synced 2026-10-17 05:24:17 +02:00
The futex functional tests cover FUTEX_LOCK_PI timeout semantics
(futex_wait_timeout.c) and robust-list owner death (robust_list.c), but
nothing exercises a non-robust PI owner exiting while holding the lock,
nor the basic ownership / EDEADLK / unlock word semantics of
FUTEX_LOCK_PI.
Add futex_lock_pi_exiting.c with three tests:
- lock_unlock_basic: an uncontended FUTEX_LOCK_PI puts the owner TID in
the futex word, a recursive lock by the owner returns EDEADLK, and
FUTEX_UNLOCK_PI clears the word.
- owner_dies_with_blocked_waiter: a thread acquires a PI futex and exits
while holding it; a blocked FUTEX_LOCK_PI waiter must come out cleanly
(0, EOWNERDEAD or ESRCH) and own the lock when it acquires.
- stress_owner_exits: repeatedly drive the same exiting-owner path.
The exiting-owner retry path is where commit 210d36d892 ("futex: Clear
stale exiting pointer in futex_lock_pi() retry path") fixed a stale task
pointer that tripped WARN_ON_ONCE() in wait_for_owner_exiting(). That
warning does not change the syscall return value, so this test does not
assert on it directly; the stress loop exists to give a kernel booted
with panic_on_warn=1 (as fuzzers and CI commonly run) a chance to trip
on it.
Signed-off-by: Valery Borovsky <vebohr@gmail.com>
Signed-off-by: Thomas Gleixner <tglx@kernel.org>
Link: https://patch.msgid.link/20260607183249.246037-1-vebohr@gmail.com
17 lines
337 B
Plaintext
17 lines
337 B
Plaintext
# SPDX-License-Identifier: GPL-2.0-only
|
|
futex_lock_pi_exiting
|
|
futex_numa_mpol
|
|
futex_priv_hash
|
|
futex_requeue
|
|
futex_requeue_pi
|
|
futex_requeue_pi_mismatched_ops
|
|
futex_requeue_pi_signal_restart
|
|
futex_wait
|
|
futex_wait_private_mapped_file
|
|
futex_wait_timeout
|
|
futex_wait_uninitialized_heap
|
|
futex_wait_wouldblock
|
|
futex_waitv
|
|
futex_numa
|
|
robust_list
|