Create per RCU flavor CDS libraries
authorMathieu Desnoyers <mathieu.desnoyers@efficios.com>
Wed, 17 Aug 2011 20:42:20 +0000 (16:42 -0400)
committerMathieu Desnoyers <mathieu.desnoyers@efficios.com>
Wed, 17 Aug 2011 20:42:20 +0000 (16:42 -0400)
Introduce per-flavor concurrent data structure libraries for data
structures depending on RCU:

liburcu-cds: memb flavor (default), matches -lurcu
liburcu-cds-qsbr: qsbr flavor, matches -lurcu-qsbr
liburcu-cds-mb: mb flavor, matches -lurcu-mb
liburcu-cds-signal, matches -lurcu-signal
liburcu-cds-bp, matches -lurcu-bp

liburcu-cds-common: Data structures not depending on RCU for
synchronization.

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Makefile.am
rculfqueue.c
rculfstack.c
tests/Makefile.am
urcu/map/urcu-bp.h
urcu/map/urcu-qsbr.h
urcu/map/urcu.h
urcu/rculfqueue.h
urcu/rculfstack.h

index 5869c5e7a1d658894597c61e292270cd51b43504..cc25362457d71189160801489dbe111fd85d0a6a 100644 (file)
@@ -33,28 +33,39 @@ if COMPAT_FUTEX
 COMPAT+=compat_futex.c
 endif
 
-lib_LTLIBRARIES = liburcu-cds.la liburcu.la liburcu-qsbr.la \
-               liburcu-mb.la liburcu-signal.la liburcu-bp.la
+lib_LTLIBRARIES = liburcu.la liburcu-qsbr.la \
+               liburcu-mb.la liburcu-signal.la liburcu-bp.la \
+               liburcu-cds.la liburcu-cds-qsbr.la \
+               liburcu-cds-mb.la liburcu-cds-signal.la liburcu-cds-bp.la \
+               liburcu-cds-common.la
 
-liburcu_cds_la_SOURCES = wfqueue.c wfstack.c rculfqueue.c rculfstack.c \
-                       $(COMPAT)
+liburcu_cds_common_la_SOURCES = wfqueue.c wfstack.c $(COMPAT)
 
 liburcu_la_SOURCES = urcu.c urcu-pointer.c $(COMPAT)
-liburcu_la_LIBADD = liburcu-cds.la
+liburcu_la_LIBADD = liburcu-cds-common.la
+liburcu_cds_la_SOURCES = rculfqueue.c rculfstack.c $(COMPAT)
 
 liburcu_qsbr_la_SOURCES = urcu-qsbr.c urcu-pointer.c $(COMPAT)
-liburcu_qsbr_la_LIBADD = liburcu-cds.la
+liburcu_qsbr_la_LIBADD = liburcu-cds-common.la
+liburcu_cds_qsbr_la_SOURCES = rculfqueue.c rculfstack.c $(COMPAT)
+liburcu_cds_qsbr_la_CFLAGS = -DRCU_QSBR
 
 liburcu_mb_la_SOURCES = urcu.c urcu-pointer.c $(COMPAT)
 liburcu_mb_la_CFLAGS = -DRCU_MB
-liburcu_mb_la_LIBADD = liburcu-cds.la
+liburcu_mb_la_LIBADD = liburcu-cds-common.la
+liburcu_cds_mb_la_SOURCES = rculfqueue.c rculfstack.c $(COMPAT)
+liburcu_cds_mb_la_CFLAGS = -DRCU_MB
 
 liburcu_signal_la_SOURCES = urcu.c urcu-pointer.c $(COMPAT)
 liburcu_signal_la_CFLAGS = -DRCU_SIGNAL
-liburcu_signal_la_LIBADD = liburcu-cds.la
+liburcu_signal_la_LIBADD = liburcu-cds-common.la
+liburcu_cds_signal_la_SOURCES = rculfqueue.c rculfstack.c $(COMPAT)
+liburcu_cds_signal_la_CFLAGS = -DRCU_SIGNAL
 
 liburcu_bp_la_SOURCES = urcu-bp.c urcu-pointer.c $(COMPAT)
-liburcu_bp_la_LIBADD = liburcu-cds.la
+liburcu_bp_la_LIBADD = liburcu-cds-common.la
+liburcu_cds_bp_la_SOURCES = rculfqueue.c rculfstack.c $(COMPAT)
+liburcu_cds_bp_la_CFLAGS = -DRCU_BP
 
 pkgconfigdir = $(libdir)/pkgconfig
 pkgconfig_DATA = liburcu-cds.pc liburcu.pc liburcu-bp.pc liburcu-qsbr.pc \
index 09ba9cf41fd8cde6f0cc58becba35066c95fada1..09b858791d8a8babc0bff46741e188b423fd23ea 100644 (file)
  */
 
 #define _LGPL_SOURCE
-/* Use the urcu symbols to select the appropriate rcu flavor at link time */
-#include "urcu.h"
+
+#ifdef RCU_QSBR
+# include "urcu-qsbr.h"
+#elif defined(RCU_BP)
+# include "urcu-bp.h"
+#else
+# include "urcu.h"
+#endif
 
 #undef _LGPL_SOURCE
 /* Do not #define _LGPL_SOURCE to ensure we can emit the wrapper symbols */
index 4a3041d9712db7bfb78674d674c916a9a50f5324..aa906af9480c66efce8c35ccf8d2b3625b9aabfd 100644 (file)
 
 /* Use the urcu symbols to select the appropriate rcu flavor at link time */
 #define _LGPL_SOURCE
-#include "urcu.h"
+
+#ifdef RCU_QSBR
+# include "urcu-qsbr.h"
+#elif defined(RCU_BP)
+# include "urcu-bp.h"
+#else
+# include "urcu.h"
+#endif
 
 #undef _LGPL_SOURCE
 /* Do not #define _LGPL_SOURCE to ensure we can emit the wrapper symbols */
index 52b6ff9efbad5aa4fac952d9351cff867eed86ce..a013c3afd6e32b57b8154a45498e0163373be7fc 100644 (file)
@@ -38,11 +38,16 @@ URCU_BP=$(top_srcdir)/urcu-bp.c $(top_srcdir)/urcu-pointer.c $(top_srcdir)/wfque
 URCU_DEFER=$(top_srcdir)/urcu.c $(top_srcdir)/urcu-pointer.c $(top_srcdir)/wfqueue.c $(COMPAT)
 
 URCU_LIB=$(top_builddir)/liburcu.la
+URCU_CDS_LIB=$(top_builddir)/liburcu-cds.la
 URCU_QSBR_LIB=$(top_builddir)/liburcu-qsbr.la
+URCU_CDS_QSBR_LIB=$(top_builddir)/liburcu-cds-qsbr.la
 URCU_MB_LIB=$(top_builddir)/liburcu-mb.la
+URCU_CDS_MB_LIB=$(top_builddir)/liburcu-cds-mb.la
 URCU_SIGNAL_LIB=$(top_builddir)/liburcu-signal.la
+URCU_CDS_SIGNAL_LIB=$(top_builddir)/liburcu-cds-signal.la
 URCU_BP_LIB=$(top_builddir)/liburcu-bp.la
-URCU_CDS_LIB=$(top_builddir)/liburcu-cds.la
+URCU_CDS_BP_LIB=$(top_builddir)/liburcu-cds-bp.la
+URCU_CDS_COMMON_LIB=$(top_builddir)/liburcu-cds-common.la
 
 EXTRA_DIST = $(top_srcdir)/tests/api.h
 
@@ -92,23 +97,23 @@ test_perthreadlock_SOURCES = test_perthreadlock.c $(URCU_SIGNAL)
 
 rcutorture_urcu_SOURCES = urcutorture.c
 rcutorture_urcu_CFLAGS = -DRCU_MEMBARRIER $(AM_CFLAGS)
-rcutorture_urcu_LDADD = $(URCU) $(URCU_CDS_LIB)
+rcutorture_urcu_LDADD = $(URCU)
 
 rcutorture_urcu_mb_SOURCES = urcutorture.c
 rcutorture_urcu_mb_CFLAGS = -DRCU_MB $(AM_CFLAGS)
-rcutorture_urcu_mb_LDADD = $(URCU_MB_LIB) $(URCU_CDS_LIB)
+rcutorture_urcu_mb_LDADD = $(URCU_MB_LIB)
 
 rcutorture_qsbr_SOURCES = urcutorture.c
 rcutorture_qsbr_CFLAGS = -DTORTURE_QSBR -DRCU_QSBR $(AM_CFLAGS)
-rcutorture_qsbr_LDADD = $(URCU_QSBR_LIB) $(URCU_CDS_LIB)
+rcutorture_qsbr_LDADD = $(URCU_QSBR_LIB)
 
 rcutorture_urcu_signal_SOURCES = urcutorture.c
 rcutorture_urcu_signal_CFLAGS = -DRCU_SIGNAL $(AM_CFLAGS)
-rcutorture_urcu_signal_LDADD = $(URCU_SIGNAL_LIB) $(URCU_CDS_LIB)
+rcutorture_urcu_signal_LDADD = $(URCU_SIGNAL_LIB)
 
 rcutorture_urcu_bp_SOURCES = urcutorture.c
 rcutorture_urcu_bp_CFLAGS = -DRCU_BP $(AM_CFLAGS)
-rcutorture_urcu_bp_LDADD = $(URCU_BP_LIB) $(URCU_CDS_LIB)
+rcutorture_urcu_bp_LDADD = $(URCU_BP_LIB)
 
 test_mutex_SOURCES = test_mutex.c $(URCU)
 
@@ -155,25 +160,25 @@ test_urcu_bp_SOURCES = test_urcu_bp.c $(URCU_BP)
 test_urcu_bp_dynamic_link_SOURCES = test_urcu_bp.c $(URCU_BP)
 test_urcu_bp_dynamic_link_CFLAGS = -DDYNAMIC_LINK_TEST $(AM_CFLAGS)
 
-test_urcu_lfq_SOURCES = test_urcu_lfq.c $(URCU)
+test_urcu_lfq_SOURCES = test_urcu_lfq.c $(URCU) $(URCU_CDS_LIB)
 test_urcu_lfq_dynlink_SOURCES = test_urcu_lfq.c $(URCU)
 test_urcu_lfq_dynlink_CFLAGS = -DDYNAMIC_LINK_TEST $(AM_CFLAGS)
 test_urcu_lfq_dynlink_LDADD = $(URCU_CDS_LIB)
 
-test_urcu_wfq_SOURCES = test_urcu_wfq.c $(COMPAT)
+test_urcu_wfq_SOURCES = test_urcu_wfq.c $(URCU_CDS_COMMON_LIB) $(COMPAT)
 test_urcu_wfq_dynlink_SOURCES = test_urcu_wfq.c
 test_urcu_wfq_dynlink_CFLAGS = -DDYNAMIC_LINK_TEST $(AM_CFLAGS)
-test_urcu_wfq_dynlink_LDADD = $(URCU_CDS_LIB)
+test_urcu_wfq_dynlink_LDADD = $(URCU_CDS_COMMON_LIB)
 
-test_urcu_lfs_SOURCES = test_urcu_lfs.c $(URCU_DEFER)
+test_urcu_lfs_SOURCES = test_urcu_lfs.c $(URCU_CDS_LIB) $(URCU_DEFER)
 test_urcu_lfs_dynlink_SOURCES = test_urcu_lfs.c $(URCU_DEFER)
 test_urcu_lfs_dynlink_CFLAGS = -DDYNAMIC_LINK_TEST $(AM_CFLAGS)
 test_urcu_lfs_dynlink_LDADD = $(URCU_CDS_LIB)
 
-test_urcu_wfs_SOURCES = test_urcu_wfs.c $(COMPAT)
+test_urcu_wfs_SOURCES = test_urcu_wfs.c $(URCU_CDS_COMMON_LIB) $(COMPAT)
 test_urcu_wfs_dynlink_SOURCES = test_urcu_wfs.c
 test_urcu_wfs_dynlink_CFLAGS = -DDYNAMIC_LINK_TEST $(AM_CFLAGS)
-test_urcu_wfs_dynlink_LDADD = $(URCU_CDS_LIB)
+test_urcu_wfs_dynlink_LDADD = $(URCU_CDS_COMMON_LIB)
 
 urcutorture.c: api.h
 
index 4abe8dccb1bc8d56358baedf9f5457eb608730c8..f62b5b38f15ec28a9a61f5af37c657dd52af7b21 100644 (file)
 #define rcu_defer_barrier              rcu_defer_barrier_bp
 #define rcu_defer_barrier_thread       rcu_defer_barrier_thread_bp
 
+/* Concurrent Data Structures */
+#define cds_lfq_node_init_rcu          cds_lfq_node_init_rcu_bp
+#define cds_lfq_init_rcu               cds_lfq_init_rcu_bp
+#define cds_lfq_destroy_rcu            cds_lfq_destroy_rcu_bp
+#define cds_lfq_enqueue_rcu            cds_lfq_enqueue_rcu_bp
+#define cds_lfq_dequeue_rcu            cds_lfq_dequeue_rcu_bp
+
+#define cds_lfs_node_init_rcu          cds_lfs_node_init_rcu_bp
+#define cds_lfs_init_rcu               cds_lfs_init_rcu_bp
+#define cds_lfs_push_rcu               cds_lfs_push_rcu_bp
+#define cds_lfs_pop_rcu                        cds_lfs_pop_rcu_bp
+
 #endif /* _URCU_BP_MAP_H */
index 0d88d83afa3d70946f131c36fdf296aeea3a4c28..6e4a1963413775e28ebbe6e6a364c6adc4ce12f9 100644 (file)
 #define        rcu_defer_barrier               rcu_defer_barrier_qsbr
 #define rcu_defer_barrier_thread       rcu_defer_barrier_thread_qsbr
 
+/* Concurrent Data Structures */
+#define cds_lfq_node_init_rcu          cds_lfq_node_init_rcu_qsbr
+#define cds_lfq_init_rcu               cds_lfq_init_rcu_qsbr
+#define cds_lfq_destroy_rcu            cds_lfq_destroy_rcu_qsbr
+#define cds_lfq_enqueue_rcu            cds_lfq_enqueue_rcu_qsbr
+#define cds_lfq_dequeue_rcu            cds_lfq_dequeue_rcu_qsbr
+
+#define cds_lfs_node_init_rcu          cds_lfs_node_init_rcu_qsbr
+#define cds_lfs_init_rcu               cds_lfs_init_rcu_qsbr
+#define cds_lfs_push_rcu               cds_lfs_push_rcu_qsbr
+#define cds_lfs_pop_rcu                        cds_lfs_pop_rcu_qsbr
+
 #endif /* _URCU_QSBR_MAP_H */
index 5942fad207102784e0c0f7f14f53734807c1de88..ea12f346306221e08812e9ad5fd1f2346be619d5 100644 (file)
 #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
 #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
 #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"
index 598fa5071a2ca727e43d07a67cb2a62eb4980632..e1d64f13d5229e251674919189c8f28d780c8d50 100644 (file)
@@ -47,11 +47,35 @@ struct cds_lfq_queue_rcu {
 
 #include <urcu/static/rculfqueue.h>
 
-#define cds_lfq_node_init_rcu          _cds_lfq_node_init_rcu
-#define cds_lfq_init_rcu               _cds_lfq_init_rcu
-#define cds_lfq_destroy_rcu            _cds_lfq_destroy_rcu
-#define cds_lfq_enqueue_rcu            _cds_lfq_enqueue_rcu
-#define cds_lfq_dequeue_rcu            _cds_lfq_dequeue_rcu
+#define cds_lfq_node_init_rcu_qsbr     _cds_lfq_node_init_rcu
+#define cds_lfq_init_rcu_qsbr          _cds_lfq_init_rcu
+#define cds_lfq_destroy_rcu_qsbr       _cds_lfq_destroy_rcu
+#define cds_lfq_enqueue_rcu_qsbr       _cds_lfq_enqueue_rcu
+#define cds_lfq_dequeue_rcu_qsbr       _cds_lfq_dequeue_rcu
+
+#define cds_lfq_node_init_rcu_bp       _cds_lfq_node_init_rcu
+#define cds_lfq_init_rcu_bp            _cds_lfq_init_rcu
+#define cds_lfq_destroy_rcu_bp         _cds_lfq_destroy_rcu
+#define cds_lfq_enqueue_rcu_bp         _cds_lfq_enqueue_rcu
+#define cds_lfq_dequeue_rcu_bp         _cds_lfq_dequeue_rcu
+
+#define cds_lfq_node_init_rcu_memb     _cds_lfq_node_init_rcu
+#define cds_lfq_init_rcu_memb          _cds_lfq_init_rcu
+#define cds_lfq_destroy_rcu_memb       _cds_lfq_destroy_rcu
+#define cds_lfq_enqueue_rcu_memb       _cds_lfq_enqueue_rcu
+#define cds_lfq_dequeue_rcu_memb       _cds_lfq_dequeue_rcu
+
+#define cds_lfq_node_init_rcu_mb       _cds_lfq_node_init_rcu
+#define cds_lfq_init_rcu_mb            _cds_lfq_init_rcu
+#define cds_lfq_destroy_rcu_mb         _cds_lfq_destroy_rcu
+#define cds_lfq_enqueue_rcu_mb         _cds_lfq_enqueue_rcu
+#define cds_lfq_dequeue_rcu_mb         _cds_lfq_dequeue_rcu
+
+#define cds_lfq_node_init_rcu_sig      _cds_lfq_node_init_rcu
+#define cds_lfq_init_rcu_sig           _cds_lfq_init_rcu
+#define cds_lfq_destroy_rcu_sig                _cds_lfq_destroy_rcu
+#define cds_lfq_enqueue_rcu_sig                _cds_lfq_enqueue_rcu
+#define cds_lfq_dequeue_rcu_sig                _cds_lfq_dequeue_rcu
 
 #else /* !_LGPL_SOURCE */
 
index 75a580b58fe39e55af2b899ef38010fe66b3db0e..ad83dbe771cd09adf33bf7446c102cecb24666c6 100644 (file)
@@ -39,10 +39,30 @@ struct cds_lfs_stack_rcu {
 
 #include <urcu/static/rculfstack.h>
 
-#define cds_lfs_node_init_rcu  _cds_lfs_node_init_rcu
-#define cds_lfs_init_rcu       _cds_lfs_init_rcu
-#define cds_lfs_push_rcu       _cds_lfs_push_rcu
-#define cds_lfs_pop_rcu                _cds_lfs_pop_rcu
+#define cds_lfs_node_init_rcu_qsbr     _cds_lfs_node_init_rcu
+#define cds_lfs_init_rcu_qsbr          _cds_lfs_init_rcu
+#define cds_lfs_push_rcu_qsbr          _cds_lfs_push_rcu
+#define cds_lfs_pop_rcu_qsbr           _cds_lfs_pop_rcu
+
+#define cds_lfs_node_init_rcu_bp       _cds_lfs_node_init_rcu
+#define cds_lfs_init_rcu_bp            _cds_lfs_init_rcu
+#define cds_lfs_push_rcu_bp            _cds_lfs_push_rcu
+#define cds_lfs_pop_rcu_bp             _cds_lfs_pop_rcu
+
+#define cds_lfs_node_init_rcu_memb     _cds_lfs_node_init_rcu
+#define cds_lfs_init_rcu_memb          _cds_lfs_init_rcu
+#define cds_lfs_push_rcu_memb          _cds_lfs_push_rcu
+#define cds_lfs_pop_rcu_memb           _cds_lfs_pop_rcu
+
+#define cds_lfs_node_init_rcu_mb       _cds_lfs_node_init_rcu
+#define cds_lfs_init_rcu_mb            _cds_lfs_init_rcu
+#define cds_lfs_push_rcu_mb            _cds_lfs_push_rcu
+#define cds_lfs_pop_rcu_mb             _cds_lfs_pop_rcu
+
+#define cds_lfs_node_init_rcu_sig      _cds_lfs_node_init_rcu
+#define cds_lfs_init_rcu_sig           _cds_lfs_init_rcu
+#define cds_lfs_push_rcu_sig           _cds_lfs_push_rcu
+#define cds_lfs_pop_rcu_sig            _cds_lfs_pop_rcu
 
 #else /* !_LGPL_SOURCE */
 
This page took 0.029912 seconds and 4 git commands to generate.