From f0708810fe66d7fdcf52903c607ed65c9fa664c7 Mon Sep 17 00:00:00 2001 From: Mathieu Desnoyers Date: Wed, 13 Jan 2010 18:46:53 -0500 Subject: [PATCH] Support sys_membarrier v6 ABI Signed-off-by: Mathieu Desnoyers --- urcu-static.h | 8 +++++--- urcu.c | 4 ++-- 2 files changed, 7 insertions(+), 5 deletions(-) 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 -- 2.34.1