X-Git-Url: http://git.liburcu.org/?a=blobdiff_plain;f=urcu%2Fmap%2Furcu.h;h=90c2f65a79a04096b244bf95692fdeb0213be417;hb=4a0b347ad068737b5ab0565cd4506f2f3b21e1f2;hp=b55e304afe60af9933992b3e6be11a3ba96ac7c2;hpb=57760d447eaed07f8a9c6552b8cefc6223ac1158;p=urcu.git diff --git a/urcu/map/urcu.h b/urcu/map/urcu.h index b55e304..90c2f65 100644 --- a/urcu/map/urcu.h +++ b/urcu/map/urcu.h @@ -35,9 +35,34 @@ /* Mapping macros to allow multiple flavors in a single binary. */ #if !defined(RCU_MEMBARRIER) && !defined(RCU_SIGNAL) && !defined(RCU_MB) +#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 + +/* 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 @@ -70,6 +95,18 @@ #define rcu_defer_barrier rcu_defer_barrier_memb #define rcu_defer_barrier_thread rcu_defer_barrier_thread_memb +/* Concurrent Data Structures */ +#define cds_lfq_node_init_rcu cds_lfq_node_init_rcu_memb +#define cds_lfq_init_rcu cds_lfq_init_rcu_memb +#define cds_lfq_destroy_rcu cds_lfq_destroy_rcu_memb +#define cds_lfq_enqueue_rcu cds_lfq_enqueue_rcu_memb +#define cds_lfq_dequeue_rcu cds_lfq_dequeue_rcu_memb + +#define cds_lfs_node_init_rcu cds_lfs_node_init_rcu_memb +#define cds_lfs_init_rcu cds_lfs_init_rcu_memb +#define cds_lfs_push_rcu cds_lfs_push_rcu_memb +#define cds_lfs_pop_rcu cds_lfs_pop_rcu_memb + #elif defined(RCU_SIGNAL) #define rcu_read_lock rcu_read_lock_sig @@ -102,6 +139,18 @@ #define rcu_defer_barrier rcu_defer_barrier_sig #define rcu_defer_barrier_thread rcu_defer_barrier_thread_sig +/* Concurrent Data Structures */ +#define cds_lfq_node_init_rcu cds_lfq_node_init_rcu_sig +#define cds_lfq_init_rcu cds_lfq_init_rcu_sig +#define cds_lfq_destroy_rcu cds_lfq_destroy_rcu_sig +#define cds_lfq_enqueue_rcu cds_lfq_enqueue_rcu_sig +#define cds_lfq_dequeue_rcu cds_lfq_dequeue_rcu_sig + +#define cds_lfs_node_init_rcu cds_lfs_node_init_rcu_sig +#define cds_lfs_init_rcu cds_lfs_init_rcu_sig +#define cds_lfs_push_rcu cds_lfs_push_rcu_sig +#define cds_lfs_pop_rcu cds_lfs_pop_rcu_sig + #elif defined(RCU_MB) #define rcu_read_lock rcu_read_lock_mb @@ -134,6 +183,18 @@ #define rcu_defer_barrier rcu_defer_barrier_mb #define rcu_defer_barrier_thread rcu_defer_barrier_thread_mb +/* Concurrent Data Structures */ +#define cds_lfq_node_init_rcu cds_lfq_node_init_rcu_mb +#define cds_lfq_init_rcu cds_lfq_init_rcu_mb +#define cds_lfq_destroy_rcu cds_lfq_destroy_rcu_mb +#define cds_lfq_enqueue_rcu cds_lfq_enqueue_rcu_mb +#define cds_lfq_dequeue_rcu cds_lfq_dequeue_rcu_mb + +#define cds_lfs_node_init_rcu cds_lfs_node_init_rcu_mb +#define cds_lfs_init_rcu cds_lfs_init_rcu_mb +#define cds_lfs_push_rcu cds_lfs_push_rcu_mb +#define cds_lfs_pop_rcu cds_lfs_pop_rcu_mb + #else #error "Undefined selection"