BPF List
 help / color / mirror / Atom feed
From: sashiko-bot@kernel.org
To: "Ankur Arora" <ankur.a.arora@oracle.com>
Cc: bpf@vger.kernel.org
Subject: Re: [PATCH v14 06/15] asm-generic: barrier: Add smp_cond_load_acquire_timeout()
Date: Tue, 14 Jul 2026 07:53:18 +0000	[thread overview]
Message-ID: <20260714075319.6DF191F000E9@smtp.kernel.org> (raw)
In-Reply-To: <20260714073041.40250-7-ankur.a.arora@oracle.com>

Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider:
- [High] smp_cond_load_acquire_timeout() fails to provide LOAD->STORE ACQUIRE semantics when the condition is met, due to the loss of control dependency on the caller's subsequent instructions.
--

--- Patch [6]: [PATCH v14 06/15] asm-generic: barrier: Add smp_cond_load_acquire_timeout() ---
commit 012b1328d58cb0c51a4024152d82f79afc2a458d
Author: Ankur Arora <ankur.a.arora@oracle.com>

asm-generic: barrier: Add smp_cond_load_acquire_timeout()

This commit adds an acquire variant of smp_cond_load_relaxed_timeout(),
reusing the relaxed variant and attempting to provide acquire semantics by
re-evaluating the condition and applying smp_acquire__after_ctrl_dep().

> diff --git a/include/asm-generic/barrier.h b/include/asm-generic/barrier.h
> index ecdaddbbd7b64..ad3c73da3cb6d 100644
> --- a/include/asm-generic/barrier.h
> +++ b/include/asm-generic/barrier.h

[ ... ]

> +#ifndef smp_cond_load_acquire_timeout
> +#define smp_cond_load_acquire_timeout(ptr, cond_expr,			\
> +				      time_expr_ns, timeout_ns)		\
> +({									\
> +	__unqual_scalar_typeof(*(ptr)) VAL;				\
> +	VAL = smp_cond_load_relaxed_timeout(ptr, cond_expr,		\
> +					     time_expr_ns,		\
> +					     timeout_ns);		\

[ ... ]

> +	/*								\
> +	 * We arrive here once the loop condition is hit, on timeout,	\
> +	 * or, if we hit both the timeout and the loop condition.	\
> +	 *								\
> +	 * The last case is low probability, but possible in the last	\
> +	 * iteration, especially on architectures with waiting		\
> +	 * cpu_poll_relax() implementations (ex. arm64).		\
> +	 * Now since the loop condition is not evaluated on timeout,	\
> +	 * we have a missed control dependency.				\
> +	 *								\
> +	 * So, force a re-evaluation of the control dependency to	\
> +	 * provide an ACQUIRE ordering for that case as well.		\
> +	 */								\
> +	if (cond_expr)							\
> +		smp_acquire__after_ctrl_dep();				\

[Severity: High]
Does this standalone if block fail to extend a control dependency to the
macro caller's subsequent code?

Control dependencies apply only to the then or else clauses of an if
statement, and do not extend to code following it. Because the caller's
subsequent instructions execute unconditionally after this if block, it
appears no control dependency is established for them.

On weakly ordered architectures (like RISC-V and LoongArch) where
smp_acquire__after_ctrl_dep() defaults to a read barrier like smp_rmb(),
this relies entirely on the control dependency for load-store ordering.
Without a structural control dependency on the caller's code, could the CPU
reorder the caller's stores before the macro's condition load completes,
breaking the required acquire semantics?

> +	(typeof(*(ptr)))VAL;						\
> +})
> +#endif

-- 
Sashiko AI review · https://sashiko.dev/#/patchset/20260714073041.40250-1-ankur.a.arora@oracle.com?part=6

  reply	other threads:[~2026-07-14  7:53 UTC|newest]

Thread overview: 29+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-07-14  7:30 [PATCH v14 00/15] barrier: Add smp_cond_load_{relaxed,acquire}_timeout() Ankur Arora
2026-07-14  7:30 ` [PATCH v14 01/15] asm-generic: barrier: Add smp_cond_load_relaxed_timeout() Ankur Arora
2026-07-14  7:42   ` sashiko-bot
2026-07-14  8:11   ` bot+bpf-ci
2026-07-14  7:30 ` [PATCH v14 02/15] arm64: barrier: Support smp_cond_load_relaxed_timeout() Ankur Arora
2026-07-14  7:50   ` sashiko-bot
2026-07-14  7:30 ` [PATCH v14 03/15] arm64/delay: move some constants out to a separate header Ankur Arora
2026-07-14  7:30 ` [PATCH v14 04/15] arm64: support WFET in smp_cond_load_relaxed_timeout() Ankur Arora
2026-07-14  7:53   ` sashiko-bot
2026-07-14  7:30 ` [PATCH v14 05/15] arm64: rqspinlock: Remove private copy of smp_cond_load_acquire_timewait() Ankur Arora
2026-07-14  7:44   ` sashiko-bot
2026-07-14  7:30 ` [PATCH v14 06/15] asm-generic: barrier: Add smp_cond_load_acquire_timeout() Ankur Arora
2026-07-14  7:53   ` sashiko-bot [this message]
2026-07-14  7:30 ` [PATCH v14 07/15] atomic: Add atomic_cond_read_*_timeout() Ankur Arora
2026-07-14  7:47   ` sashiko-bot
2026-07-14  7:30 ` [PATCH v14 08/15] locking/atomic: scripts: build atomic_long_cond_read_*_timeout() Ankur Arora
2026-07-14  7:30 ` [PATCH v14 09/15] bpf/rqspinlock: switch check_timeout() to a clock interface Ankur Arora
2026-07-14  7:30 ` [PATCH v14 10/15] bpf/rqspinlock: Use smp_cond_load_acquire_timeout() Ankur Arora
2026-07-14  8:11   ` bot+bpf-ci
2026-07-14  7:30 ` [PATCH v14 11/15] sched: add need-resched timed wait interface Ankur Arora
2026-07-14  7:30 ` [PATCH v14 12/15] cpuidle/poll_state: Wait for need-resched via tif_need_resched_relaxed_wait() Ankur Arora
2026-07-14  8:11   ` bot+bpf-ci
2026-07-14  7:30 ` [PATCH v14 13/15] arm64/delay: enable testing smp_cond_load_relaxed_timeout() Ankur Arora
2026-07-14  7:58   ` sashiko-bot
2026-07-14  7:30 ` [PATCH v14 14/15] barrier: add tests for smp_cond_load_*_timeout() Ankur Arora
2026-07-14  7:55   ` sashiko-bot
2026-07-14  8:11   ` bot+bpf-ci
2026-07-14  7:30 ` [PATCH v14 15/15] barrier: add clock tests for smp_cond_load_relaxed_timeout() Ankur Arora
2026-07-14  8:03   ` sashiko-bot

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=20260714075319.6DF191F000E9@smtp.kernel.org \
    --to=sashiko-bot@kernel.org \
    --cc=ankur.a.arora@oracle.com \
    --cc=bpf@vger.kernel.org \
    --cc=sashiko-reviews@lists.linux.dev \
    /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