Catalin Marinas <catalin.marinas@xxxxxxx> writes: > On Wed, Sep 10, 2025 at 08:46:50PM -0700, Ankur Arora wrote: >> 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. Will take care of the cpuidle changes in the arm64 polling in idle series. -- ankur