On Thu, May 9, 2013 at 8:27 PM, Mathieu Desnoyers <[email protected]> wrote: > * Lai Jiangshan ([email protected]) wrote: > [...] >> How about we also define membarrier(...) which just returns -ENOSYS >> when the system don't have SYS_membarrier? > > Indeed, this vastly simplifies the patch: > > Thoughts ? > > --- > diff --git a/urcu.c b/urcu.c > index b3f94da..763b40c 100644 > --- a/urcu.c > +++ b/urcu.c > @@ -139,7 +139,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..0b03a50 100644 > --- a/urcu/static/urcu.h > +++ b/urcu/static/urcu.h > @@ -33,6 +33,7 @@ > #include <pthread.h> > #include <unistd.h> > #include <stdint.h> > +#include <error.h> > > #include <urcu/compiler.h> > #include <urcu/arch.h> > @@ -52,29 +53,23 @@ extern "C" { > #endif > > /* > - * RCU_MEMBARRIER is only possibly available on Linux. Fallback to RCU_MB > - * otherwise. > + * RCU_MEMBARRIER is only possibly available on Linux. > */ > -#if !defined(__linux__) && defined(RCU_MEMBARRIER) > -#undef RCU_MEMBARRIER > -#define RCU_MB > -#endif > - > -#ifdef RCU_MEMBARRIER > +#if defined(RCU_MEMBARRIER) && defined(__linux__) > #include <syscall.h> > +#endif > > -/* If the headers do not support SYS_membarrier, statically use RCU_MB */ > +/* If the headers do not support SYS_membarrier, fall back on 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 > +# define membarrier(...) -ENOSYS > #endif > > +#define MEMBARRIER_EXPEDITED (1 << 0) > +#define MEMBARRIER_DELAYED (1 << 1) > +#define MEMBARRIER_QUERY (1 << 16) > +
I think this code can be moved into urcu.c > /* > * 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 > > -- > Mathieu Desnoyers > EfficiOS Inc. > http://www.efficios.com _______________________________________________ lttng-dev mailing list [email protected] http://lists.lttng.org/cgi-bin/mailman/listinfo/lttng-dev
