Thread (23 messages) 23 messages, 4 authors, 2025-09-22

Re: [PATCH v5 5/5] rqspinlock: Use smp_cond_load_acquire_timeout()

From: Ankur Arora <hidden>
Date: 2025-09-12 18:07:15
Also in: bpf, linux-arch, lkml

Catalin Marinas [off-list ref] writes:
On Thu, Sep 11, 2025 at 02:58:22PM -0700, Ankur Arora wrote:
quoted
Kumar Kartikeya Dwivedi [off-list ref] writes:
quoted
On Thu, 11 Sept 2025 at 16:32, Catalin Marinas [off-list ref] wrote:
quoted
On Wed, Sep 10, 2025 at 08:46:55PM -0700, Ankur Arora wrote:
quoted
Switch out the conditional load inerfaces used by rqspinlock
to smp_cond_read_acquire_timeout().
This interface handles the timeout check explicitly and does any
necessary amortization, so use check_timeout() directly.
It's worth mentioning that the default smp_cond_load_acquire_timeout()
implementation (without hardware support) only spins 200 times instead
of 16K times in the rqspinlock code. That's probably fine but it would
be good to have confirmation from Kumar or Alexei.
This looks good, but I would still redefine the spin count from 200 to
16k for rqspinlock.c, especially because we need to keep
RES_CHECK_TIMEOUT around which still uses 16k spins to amortize
check_timeout.
By my count that amounts to ~100us per check_timeout() on x86
systems I've tested with cpu_relax(). Which seems quite reasonable.

16k also seems safer on CPUs where cpu_relax() is basically a NOP.
Does this spin count work for poll_idle()? I don't remember where the
200 value came from.
Just reusing the value of POLL_IDLE_RELAX_COUNT which is is defined as
200.

For the poll_idle() case I don't think the value of 200 makes sense
for all architectures, so they'll need to redefine it (before defining
ARCH_HAS_OPTIMIZED_POLL which gates poll_idle().)

--
ankur
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help