From fccd1b07daa2faaaa3b25fdb377c973f9f50213b Mon Sep 17 00:00:00 2001 From: "Jason A. Donenfeld" Date: Sat, 4 Aug 2018 15:18:57 +0200 Subject: compat: better atomic acquire/release backport --- src/compat/compat.h | 26 ++++++++++---------------- 1 file changed, 10 insertions(+), 16 deletions(-) (limited to 'src') diff --git a/src/compat/compat.h b/src/compat/compat.h index 86df5f3..c6e1e50 100644 --- a/src/compat/compat.h +++ b/src/compat/compat.h @@ -52,8 +52,12 @@ #define READ_ONCE ACCESS_ONCE #endif #ifndef WRITE_ONCE +#ifdef ACCESS_ONCE_RW +#define WRITE_ONCE(p, v) (ACCESS_ONCE_RW(p) = (v)) +#else #define WRITE_ONCE(p, v) (ACCESS_ONCE(p) = (v)) #endif +#endif #if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 17, 0) #include "udp_tunnel/udp_tunnel_partial_compat.h" @@ -614,24 +618,14 @@ static inline void *skb_put_data(struct sk_buff *skb, const void *data, unsigned #endif #if LINUX_VERSION_CODE < KERNEL_VERSION(3, 14, 0) -#ifndef smp_store_release -#define smp_store_release(p, v) \ -do { \ - smp_mb(); \ - ACCESS_ONCE(*p) = (v); \ -} while (0) -#endif -#ifndef smp_load_acquire -#define smp_load_acquire(p) \ -({ \ - typeof(*p) ___p1 = ACCESS_ONCE(*p); \ - smp_mb(); \ - ___p1; \ -}) +#include +#ifndef atomic_read_acquire +#define atomic_read_acquire(v) ({ int ___p1 = atomic_read(v); smp_rmb(); ___p1; }) #endif +#ifndef atomic_set_release +#define atomic_set_release(v, i) ({ smp_wmb(); atomic_set(v, i); }) #endif - -#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 3, 0) +#elif LINUX_VERSION_CODE < KERNEL_VERSION(4, 3, 0) #include #ifndef atomic_read_acquire #define atomic_read_acquire(v) smp_load_acquire(&(v)->counter) -- cgit v1.2.3-59-g8ed1b