From: Waiman Long <llong@redhat.com>
To: pengyu <pengyu@kylinos.cn>,
peterz@infradead.org, mingo@redhat.com, will@kernel.org,
boqun.feng@gmail.com
Cc: linux-kernel@vger.kernel.org
Subject: Re: [PATCH] locking/qspinlock: use xchg with _mb in slowpath for arm64
Date: Tue, 16 Sep 2025 09:27:20 -0400 [thread overview]
Message-ID: <8b89a9a8-7114-452e-bf7c-86f0cedbe01d@redhat.com> (raw)
In-Reply-To: <20250916033903.3374794-1-pengyu@kylinos.cn>
On 9/15/25 11:39 PM, pengyu wrote:
> From: Yu Peng <pengyu@kylinos.cn>
>
> A hardlock detected on arm64: rq->lock was released, but a CPU
> blocked at mcs_node->locked and timed out.
>
> We found xchg_tail and atomic_try_cmpxchg_relaxed used _relaxed
> versions without memory barriers. Suspected insufficient coherence
> guarantees on some arm64 microarchitectures, potentially leading to
> the following issues occurred:
>
> CPU0: CPU1:
> // Set tail to CPU0
> old = xchg_tail(lock, tail);
>
> //CPU0 read tail is itself
> if ((val & _Q_TAIL_MASK) == tail)
> // CPU1 exchanges the tail
> old = xchg_tail(lock, tail)
> //assuming CPU0 not see tail change
> atomic_try_cmpxchg_relaxed(
> &lock->val, &val, _Q_LOCKED_VAL)
> //released without notifying CPU1
> goto release;
> //hardlock detected
> arch_mcs_spin_lock_contended(
> &node->locked)
>
> Therefore, xchg_tail and atomic_try_cmpxchg using _mb to replace _relaxed.
>
> Signed-off-by: pengyu <pengyu@kylinos.cn>
The qspinlock code had been enabled for arm64 for quite a long time.
This is the first time that we got report like this. How reproducible is
this hangup problem?
What arm64 architecture has this problem? It can be a hardware bug.
Anyway, changing a relaxed version of atomic op to a fully barrier
version can be expensive on arm64 in general. We need more information
to ensure that we are doing the right thing.
Cheers,
Longman
next prev parent reply other threads:[~2025-09-16 13:27 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-09-16 3:39 [PATCH] locking/qspinlock: use xchg with _mb in slowpath for arm64 pengyu
2025-09-16 13:27 ` Waiman Long [this message]
2025-09-16 14:10 ` Peter Zijlstra
2025-09-16 16:00 ` Will Deacon
2025-09-17 10:51 ` pengyu
2025-09-17 11:37 ` Will Deacon
2025-09-19 10:22 ` pengyu
2025-09-16 16:58 ` Waiman Long
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=8b89a9a8-7114-452e-bf7c-86f0cedbe01d@redhat.com \
--to=llong@redhat.com \
--cc=boqun.feng@gmail.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@redhat.com \
--cc=pengyu@kylinos.cn \
--cc=peterz@infradead.org \
--cc=will@kernel.org \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox