From: Thomas Gleixner <tglx@kernel.org>
To: "André Almeida" <andrealmeid@igalia.com>,
"Sebastian Andrzej Siewior" <bigeasy@linutronix.de>
Cc: LKML <linux-kernel@vger.kernel.org>,
"Mathieu Desnoyers" <mathieu.desnoyers@efficios.com>,
"Carlos O'Donell" <carlos@redhat.com>,
"Peter Zijlstra" <peterz@infradead.org>,
"Florian Weimer" <fweimer@redhat.com>,
"Rich Felker" <dalias@aerifal.cx>,
"Torvald Riegel" <triegel@redhat.com>,
"Darren Hart" <dvhart@infradead.org>,
"Ingo Molnar" <mingo@kernel.org>,
"Davidlohr Bueso" <dave@stgolabs.net>,
"Arnd Bergmann" <arnd@arndb.de>,
"Liam R . Howlett" <Liam.Howlett@oracle.com>,
"Uros Bizjak" <ubizjak@gmail.com>,
"Thomas Weißschuh" <linux@weissschuh.net>,
kernel-dev@igalia.com
Subject: Re: [PATCH 15/14] selftests: futex: Add tests for robust unlock within the critical section.
Date: Fri, 29 May 2026 23:27:14 +0200 [thread overview]
Message-ID: <87cxyd9aa5.ffs@fw13> (raw)
In-Reply-To: <a11c5dbf-48d9-4014-8daf-b8afbdec32d4@igalia.com>
On Wed, May 27 2026 at 23:55, André Almeida wrote:
> Em 04/04/2026 06:39, Sebastian Andrzej Siewior escreveu:
>> +
>> + } else if (state == STATE_IN_CS) {
>> + /*
>> + * If the critical section has been entered then
>> + * the kernel has to unlock and clean list_op_pending.
>> + * On 32bit the pointer is just 32bit wide, the
>> + * upper 32bit are cleaned on 64bit.
>> + */
>> + if (is_32bit)
>> + rhead_val &= 0xffffffff;
>> +
>> + ASSERT_EQ(rhead_val, 0);
>> + ASSERT_EQ(lock_val, 0);
>> + }
>
> It turns out that the test success I saw with my aarch64 implementation
> was a false positive :/ There's no logic to verify if the code really
> enters the critical section. If the code just jump over it, the test
> never checks if lock_val and rhead_val are actually zeroed.
>
>> +
>> + if (ptrace(PTRACE_SINGLESTEP, child, 0, 0))
>> + err(1, "PTRACE_SINGLESTEP");
>
> After I fixed my code, the selftest got to an infinity loop (maybe we
> should add max steps?). The single steps doesn't work for LL/SC locks,
> like this one:
>
> retry:
> ldxr %w[val], %[lock]
> cmp %w[tid], %w[val]
> bne end
> stlxr %w[result], wzr, %[lock]
> cbnz %w[result], retry
> end:
>
>
> The single step with ptrace() causes a context switch that clear the
> exclusive monitor[1], so store fails and the code branches to retry. We
> need to jump straight to `cbnz %w[result], retry`. I tested to single
> step with GDB, and it turns outs that it is smart enough to run the code
> from ldxr to stlxr "atomically", to avoid messing with the exclusive
> monitor and then it worked as expected.
That's why I put the labels into the ASM so that the test can set
breakpoints at the proper points and check whether the kernel/vdso did
the right thing. Single stepping is not really a good idea because you
can't test the interruption points, which matter correctly.
Thanks,
tglx
prev parent reply other threads:[~2026-05-29 21:27 UTC|newest]
Thread overview: 32+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-04-02 15:21 [patch V4 00/14] futex: Address the robust futex unlock race for real Thomas Gleixner
2026-04-02 15:21 ` [patch V4 01/14] futex: Move futex task related data into a struct Thomas Gleixner
2026-04-02 15:21 ` [patch V4 02/14] futex: Make futex_mm_init() void Thomas Gleixner
2026-04-02 15:21 ` [patch V4 03/14] futex: Move futex related mm_struct data into a struct Thomas Gleixner
2026-04-09 11:11 ` Nam Cao
2026-04-10 14:20 ` Thomas Gleixner
2026-04-02 15:21 ` [patch V4 04/14] futex: Provide UABI defines for robust list entry modifiers Thomas Gleixner
2026-04-02 15:21 ` [patch V4 05/14] uaccess: Provide unsafe_atomic_store_release_user() Thomas Gleixner
2026-04-02 15:21 ` [patch V4 06/14] x86: Select ARCH_MEMORY_ORDER_TSO Thomas Gleixner
2026-04-02 15:21 ` [patch V4 07/14] futex: Cleanup UAPI defines Thomas Gleixner
2026-04-02 15:21 ` [patch V4 08/14] futex: Add support for unlocking robust futexes Thomas Gleixner
2026-04-02 15:21 ` [patch V4 09/14] futex: Add robust futex unlock IP range Thomas Gleixner
2026-05-28 1:02 ` André Almeida
2026-05-29 21:30 ` Thomas Gleixner
2026-04-02 15:21 ` [patch V4 10/14] futex: Provide infrastructure to plug the non contended robust futex unlock race Thomas Gleixner
2026-05-28 1:08 ` André Almeida
2026-05-29 21:14 ` Thomas Gleixner
2026-04-02 15:21 ` [patch V4 11/14] x86/vdso: Prepare for robust futex unlock support Thomas Gleixner
2026-05-28 1:14 ` André Almeida
2026-04-02 15:22 ` [patch V4 12/14] x86/vdso: Implement __vdso_futex_robust_try_unlock() Thomas Gleixner
2026-04-29 8:44 ` Thomas Weißschuh
2026-05-07 9:29 ` Thomas Gleixner
2026-05-07 9:48 ` Thomas Weißschuh
2026-05-07 16:51 ` Thomas Gleixner
2026-05-29 15:36 ` André Almeida
2026-04-02 15:22 ` [patch V4 13/14] Documentation: futex: Add a note about robust list race condition Thomas Gleixner
2026-04-02 15:22 ` [patch V4 14/14] selftests: futex: Add tests for robust release operations Thomas Gleixner
2026-04-04 9:39 ` [PATCH 15/14] selftests: futex: Add tests for robust unlock within the critical section Sebastian Andrzej Siewior
2026-04-04 20:13 ` Thomas Gleixner
2026-05-22 22:16 ` André Almeida
2026-05-28 2:55 ` André Almeida
2026-05-29 21:27 ` Thomas Gleixner [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=87cxyd9aa5.ffs@fw13 \
--to=tglx@kernel.org \
--cc=Liam.Howlett@oracle.com \
--cc=andrealmeid@igalia.com \
--cc=arnd@arndb.de \
--cc=bigeasy@linutronix.de \
--cc=carlos@redhat.com \
--cc=dalias@aerifal.cx \
--cc=dave@stgolabs.net \
--cc=dvhart@infradead.org \
--cc=fweimer@redhat.com \
--cc=kernel-dev@igalia.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux@weissschuh.net \
--cc=mathieu.desnoyers@efficios.com \
--cc=mingo@kernel.org \
--cc=peterz@infradead.org \
--cc=triegel@redhat.com \
--cc=ubizjak@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.