X-Git-Url: http://git.liburcu.org/?p=urcu.git;a=blobdiff_plain;f=include%2Furcu%2Fsystem.h;fp=include%2Furcu%2Fsystem.h;h=139c37f6d474a646141bb0650b6f8c936061a9a2;hp=8816c50c924e07293aabf72af9a615046c85ef77;hb=d18544842bdfbf2cba6c194a8e8d305ddf5e295e;hpb=72d24c88ee075c8368fe57ee7e8fc66d99ce7e39 diff --git a/include/urcu/system.h b/include/urcu/system.h index 8816c50..139c37f 100644 --- a/include/urcu/system.h +++ b/include/urcu/system.h @@ -9,9 +9,29 @@ * System definitions. */ +#include #include #include +#ifdef CONFIG_RCU_USE_ATOMIC_BUILTINS + +#define CMM_LOAD_SHARED(x) \ + __atomic_load_n(cmm_cast_volatile(&(x)), __ATOMIC_RELAXED) + +#define _CMM_LOAD_SHARED(x) CMM_LOAD_SHARED(x) + +#define CMM_STORE_SHARED(x, v) \ + __extension__ \ + ({ \ + __typeof__(v) _v = (v); \ + __atomic_store_n(cmm_cast_volatile(&(x)), _v, \ + __ATOMIC_RELAXED); \ + _v; \ + }) + +#define _CMM_STORE_SHARED(x, v) CMM_STORE_SHARED(x, v) + +#else /* * Identify a shared load. A cmm_smp_rmc() or cmm_smp_mc() should come * before the load. @@ -46,4 +66,6 @@ _v = _v; /* Work around clang "unused result" */ \ }) +#endif /* CONFIG_RCU_USE_ATOMIC_BUILTINS */ + #endif /* _URCU_SYSTEM_H */