All of lore.kernel.org
 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 v13 02/15] arm64: barrier: Support smp_cond_load_relaxed_timeout()
Date: Thu, 02 Jul 2026 01:50:11 +0000	[thread overview]
Message-ID: <20260702015011.F06211F000E9@smtp.kernel.org> (raw)
In-Reply-To: <20260702013334.140905-3-ankur.a.arora@oracle.com>

Thank you for your contribution! Sashiko AI review found 2 potential issue(s) to consider:
- [High] The macro `cpu_poll_relax()` references `arch_timer_evtstrm_available()`, which is not exported to loadable modules, causing module build failures.
- [Medium] Hardcoding `SMP_TIMEOUT_POLL_COUNT` to 1 severely degrades spin-wait performance in the fallback path when the event stream is disabled.
--

commit 906c27d3b9d6d75543755daf442e8912be30a6da
Author: Ankur Arora <ankur.a.arora@oracle.com>

arm64: barrier: Support smp_cond_load_relaxed_timeout()

This commit adds support for smp_cond_load_relaxed_timeout() on arm64 by
utilizing __cmpwait_relaxed(). It restricts this path to when the event-stream
is enabled to prevent blocking indefinitely, falling back to cpu_relax()
otherwise. It also sets SMP_TIMEOUT_POLL_COUNT to 1.

> diff --git a/arch/arm64/include/asm/barrier.h b/arch/arm64/include/asm/barrier.h
> index 9495c4441a46b..6190e178db51f 100644
> --- a/arch/arm64/include/asm/barrier.h
> +++ b/arch/arm64/include/asm/barrier.h

[ ... ]

> @@ -219,6 +220,26 @@ do {									\
>  	(typeof(*ptr))VAL;						\
>  })
>  
> +/* Re-declared here to avoid include dependency. */
> +extern bool arch_timer_evtstrm_available(void);
> +
> +/*
> + * In the common case, cpu_poll_relax() sits waiting in __cmpwait_relaxed()
> + * for the ptr value to change.
> + *
> + * Since this period is reasonably long, choose SMP_TIMEOUT_POLL_COUNT
> + * to be 1, so smp_cond_load_{relaxed,acquire}_timeout() does a
> + * time-check in each iteration.
> + */
> +#define SMP_TIMEOUT_POLL_COUNT	1

[Severity: Medium]
Does setting SMP_TIMEOUT_POLL_COUNT to 1 cause severe performance degradation
when the event stream is disabled?

If arch_timer_evtstrm_available() returns false, cpu_poll_relax() falls back
to cpu_relax(), which spins very fast. With SMP_TIMEOUT_POLL_COUNT set to 1,
the generic loop in smp_cond_load_relaxed_timeout() bypasses any batching and
evaluates the time expression on every single iteration.

If the time expression accesses a clock like ktime_get_mono_fast_ns(), could
spinning CPUs repeatedly read the timekeeper seqcount and hardware clock
without backoff, causing cache-line contention and pipeline saturation?

> +
> +#define cpu_poll_relax(ptr, val, timeout_ns) do {			\
> +	if (arch_timer_evtstrm_available())				\
> +		__cmpwait_relaxed(ptr, val);				\
> +	else								\
> +		cpu_relax();						\
> +} while (0)

[Severity: High]
Will this cause module build failures when loadable modules use
smp_cond_load_relaxed_timeout() or its atomic wrappers?

Because cpu_poll_relax() is an inline macro, it forces any caller, including
modules, to link against arch_timer_evtstrm_available():

drivers/clocksource/arm_arch_timer.c:arch_timer_evtstrm_available() {
    ...
    return cpumask_test_cpu(raw_smp_processor_id(), &evtstrm_available);
}

Since arch_timer_evtstrm_available() lacks an EXPORT_SYMBOL() or
EXPORT_SYMBOL_GPL(), will standard modules fail to compile at the modpost
stage with an undefined symbol error?

> +
>  #include <asm-generic/barrier.h>
>  
>  #endif	/* __ASSEMBLER__ */

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

  reply	other threads:[~2026-07-02  1:50 UTC|newest]

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

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=20260702015011.F06211F000E9@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 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.