* Lai Jiangshan ([email protected]) wrote: > On 05/09/2013 11:10 PM, Mathieu Desnoyers wrote: > > * Lai Jiangshan ([email protected]) wrote: > > [...] > >> I think this code can be moved into urcu.c > > > > good point! How about this ? > > Hi, I don't see any obvious bad thing, but I can't carefully check it > currently, It seems OK for me. > > Could you make it some progress.
Thanks. Merged as: commit 553b7eb9da3a223368abdf3f6a5ead35acf8a20b Author: Mathieu Desnoyers <[email protected]> Date: Wed May 8 09:53:45 2013 -0400 Fix: membarrier fallback symbol conflict Mathieu > > Thanks, > Lai > > > > > --- > > diff --git a/urcu.c b/urcu.c > > index b3f94da..1d5c06f 100644 > > --- a/urcu.c > > +++ b/urcu.c > > @@ -62,6 +62,24 @@ > > */ > > #define RCU_QS_ACTIVE_ATTEMPTS 100 > > > > +/* > > + * RCU_MEMBARRIER is only possibly available on Linux. > > + */ > > +#if defined(RCU_MEMBARRIER) && defined(__linux__) > > +#include <syscall.h> > > +#endif > > + > > +/* If the headers do not support SYS_membarrier, fall back on RCU_MB */ > > +#ifdef SYS_membarrier > > +# define membarrier(...) syscall(SYS_membarrier, __VA_ARGS__) > > +#else > > +# define membarrier(...) -ENOSYS > > +#endif > > + > > +#define MEMBARRIER_EXPEDITED (1 << 0) > > +#define MEMBARRIER_DELAYED (1 << 1) > > +#define MEMBARRIER_QUERY (1 << 16) > > + > > #ifdef RCU_MEMBARRIER > > static int init_done; > > int rcu_has_sys_membarrier; > > @@ -139,7 +157,7 @@ static void mutex_unlock(pthread_mutex_t *mutex) > > static void smp_mb_master(int group) > > { > > if (caa_likely(rcu_has_sys_membarrier)) > > - membarrier(MEMBARRIER_EXPEDITED); > > + (void) membarrier(MEMBARRIER_EXPEDITED); > > else > > cmm_smp_mb(); > > } > > diff --git a/urcu/map/urcu.h b/urcu/map/urcu.h > > index 217bff5..77b3721 100644 > > --- a/urcu/map/urcu.h > > +++ b/urcu/map/urcu.h > > @@ -38,31 +38,6 @@ > > #define RCU_MEMBARRIER > > #endif > > > > -/* > > - * RCU_MEMBARRIER is only possibly available on Linux. Fallback to > > - * RCU_MB > > - * otherwise. > > - */ > > -#if !defined(__linux__) && defined(RCU_MEMBARRIER) > > -#undef RCU_MEMBARRIER > > -#define RCU_MB > > -#endif > > - > > -#ifdef RCU_MEMBARRIER > > -#include <syscall.h> > > - > > -/* If the headers do not support SYS_membarrier, statically use RCU_MB */ > > -#ifdef SYS_membarrier > > -# define MEMBARRIER_EXPEDITED (1 << 0) > > -# define MEMBARRIER_DELAYED (1 << 1) > > -# define MEMBARRIER_QUERY (1 << 16) > > -# define membarrier(...) syscall(SYS_membarrier, __VA_ARGS__) > > -#else > > -# undef RCU_MEMBARRIER > > -# define RCU_MB > > -#endif > > -#endif > > - > > #ifdef RCU_MEMBARRIER > > > > #define rcu_read_lock rcu_read_lock_memb > > diff --git a/urcu/static/urcu.h b/urcu/static/urcu.h > > index bee97ee..53d2610 100644 > > --- a/urcu/static/urcu.h > > +++ b/urcu/static/urcu.h > > @@ -52,30 +52,6 @@ extern "C" { > > #endif > > > > /* > > - * RCU_MEMBARRIER is only possibly available on Linux. Fallback to RCU_MB > > - * otherwise. > > - */ > > -#if !defined(__linux__) && defined(RCU_MEMBARRIER) > > -#undef RCU_MEMBARRIER > > -#define RCU_MB > > -#endif > > - > > -#ifdef RCU_MEMBARRIER > > -#include <syscall.h> > > - > > -/* If the headers do not support SYS_membarrier, statically use RCU_MB */ > > -#ifdef SYS_membarrier > > -# define MEMBARRIER_EXPEDITED (1 << 0) > > -# define MEMBARRIER_DELAYED (1 << 1) > > -# define MEMBARRIER_QUERY (1 << 16) > > -# define membarrier(...) syscall(SYS_membarrier, __VA_ARGS__) > > -#else > > -# undef RCU_MEMBARRIER > > -# define RCU_MB > > -#endif > > -#endif > > - > > -/* > > * This code section can only be included in LGPL 2.1 compatible source > > code. > > * See below for the function call wrappers which can be used in code > > meant to > > * be only linked with the Userspace RCU library. This comes with a small > > > -- Mathieu Desnoyers EfficiOS Inc. http://www.efficios.com _______________________________________________ lttng-dev mailing list [email protected] http://lists.lttng.org/cgi-bin/mailman/listinfo/lttng-dev
