From: Mathieu Desnoyers Date: Wed, 13 Jan 2010 23:46:53 +0000 (-0500) Subject: Support sys_membarrier v6 ABI X-Git-Tag: v0.4.0~8 X-Git-Url: http://git.liburcu.org/?p=urcu.git;a=commitdiff_plain;h=f0708810fe66d7fdcf52903c607ed65c9fa664c7 Support sys_membarrier v6 ABI Signed-off-by: Mathieu Desnoyers --- diff --git a/urcu-static.h b/urcu-static.h index 853c327..44bcd07 100644 --- a/urcu-static.h +++ b/urcu-static.h @@ -56,10 +56,12 @@ extern "C" { /* If the headers do not support SYS_membarrier, statically use RCU_MB */ #ifdef SYS_membarrier -#define membarrier(...) syscall(__NR_membarrier, __VA_ARGS__) +# define MEMBARRIER_EXPEDITED (1 << 0) +# define MEMBARRIER_DELAYED (1 << 1) +# define membarrier(...) syscall(__NR_membarrier, __VA_ARGS__) #else -#undef RCU_MEMBARRIER -#define RCU_MB +# undef RCU_MEMBARRIER +# define RCU_MB #endif #endif diff --git a/urcu.c b/urcu.c index 67a3eb2..b8e8b42 100644 --- a/urcu.c +++ b/urcu.c @@ -132,7 +132,7 @@ static void switch_next_rcu_qparity(void) static void smp_mb_heavy(void) { if (likely(has_sys_membarrier)) - membarrier(1); + membarrier(MEMBARRIER_EXPEDITED); else smp_mb(); } @@ -392,7 +392,7 @@ void rcu_init(void) if (init_done) return; init_done = 1; - if (!membarrier(1)) + if (!membarrier(MEMBARRIER_EXPEDITED)) has_sys_membarrier = 1; } #endif