Re: [PATCH v5 0/5] barrier: Add smp_cond_load_*_timeout()
From: Catalin Marinas <catalin.marinas@arm.com>
Date: 2025-09-15 11:12:56
Also in:
bpf, linux-arch, lkml
On Thu, Sep 11, 2025 at 02:57:52PM -0700, Ankur Arora wrote:
Catalin Marinas [off-list ref] writes:quoted
On Wed, Sep 10, 2025 at 08:46:50PM -0700, Ankur Arora wrote:quoted
This series adds waited variants of the smp_cond_load() primitives: smp_cond_load_relaxed_timeout(), and smp_cond_load_acquire_timeout(). As the name suggests, the new interfaces are meant for contexts where you want to wait on a condition variable for a finite duration. This is easy enough to do with a loop around cpu_relax() and a periodic timeout check (pretty much what we do in poll_idle(). However, some architectures (ex. arm64) also allow waiting on a cacheline. So, smp_cond_load_relaxed_timeout(ptr, cond_expr, time_check_expr) smp_cond_load_acquire_timeout(ptr, cond_expr, time_check_expr) do a mixture of spin/wait with a smp_cond_load() thrown in. The added parameter, time_check_expr, determines the bail out condition. There are two current users for these interfaces. poll_idle() with the change: poll_idle() { ... time_end = local_clock_noinstr() + cpuidle_poll_time(drv, dev); raw_local_irq_enable(); if (!current_set_polling_and_test()) flags = smp_cond_load_relaxed_timeout(¤t_thread_info()->flags, (VAL & _TIF_NEED_RESCHED), ((local_clock_noinstr() >= time_end))); dev->poll_time_limit = !(flags & _TIF_NEED_RESCHED); raw_local_irq_disable(); ... }You should have added this as a patch in the series than include the implementation in the cover letter.This was probably an overkill but I wanted to not add another subsystem to this series.
If you include it, it's easier to poke the cpuidle maintainers and ask if they are ok with the proposed API as I want to avoid changing it afterwards. It doesn't mean they'll have to be merged together, they can go upstream via separate routes.
Will take care of the cpuidle changes in the arm64 polling in idle series.
Thanks. We also need Will, Peter Z and Arnd to ack the API and the generic changes (probably once you added the linux/atomic.h changes). -- Catalin