Add the acquire variant of smp_cond_load_relaxed_timewait(). This reuses the relaxed variant, with an additional LOAD->LOAD ordering. Cc: Arnd Bergmann Cc: Will Deacon Cc: Catalin Marinas Cc: Peter Zijlstra Cc: linux-arch@vger.kernel.org Signed-off-by: Ankur Arora --- include/asm-generic/barrier.h | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/include/asm-generic/barrier.h b/include/asm-generic/barrier.h index c87d6fd8746f..58e510e37b87 100644 --- a/include/asm-generic/barrier.h +++ b/include/asm-generic/barrier.h @@ -308,6 +308,28 @@ do { \ }) #endif +/** + * smp_cond_load_acquire_timewait() - (Spin) wait for cond with ACQUIRE ordering + * until a timeout expires. + * + * Arguments: same as smp_cond_load_relaxed_timeout(). + * + * Equivalent to using smp_cond_load_acquire() on the condition variable with + * a timeout. + */ +#ifndef smp_cond_load_acquire_timewait +#define smp_cond_load_acquire_timewait(ptr, cond_expr, time_check_expr) \ +({ \ + __unqual_scalar_typeof(*ptr) _val; \ + _val = smp_cond_load_relaxed_timewait(ptr, cond_expr, \ + time_check_expr); \ + \ + /* Depends on the control dependency of the wait above. */ \ + smp_acquire__after_ctrl_dep(); \ + (typeof(*ptr))_val; \ +}) +#endif + /* * pmem_wmb() ensures that all stores for which the modification * are written to persistent storage by preceding instructions have -- 2.31.1