Merge branch 'master' into urcu/ht-shrink
authorMathieu Desnoyers <mathieu.desnoyers@efficios.com>
Mon, 5 Dec 2011 23:37:50 +0000 (18:37 -0500)
committerMathieu Desnoyers <mathieu.desnoyers@efficios.com>
Mon, 5 Dec 2011 23:37:50 +0000 (18:37 -0500)
Conflicts:
Makefile.am
urcu-bp.c

1  2 
Makefile.am
urcu-bp.c
urcu-bp.h

diff --combined Makefile.am
index 91a9fd144645dea22a9ac609e22bdb9a19112042,a7d3316cf144f946546098e866c9ab824058888d..e1bf095458db0cd891dbaef174b158be07743156
@@@ -8,22 -8,21 +8,23 @@@ AM_CFLAGS=-Wal
  SUBDIRS = . tests
  
  include_HEADERS = urcu.h urcu-bp.h urcu-call-rcu.h urcu-defer.h \
 -              urcu-pointer.h urcu-qsbr.h
 +              urcu-pointer.h urcu-qsbr.h urcu-flavor.h
  nobase_dist_include_HEADERS = urcu/compiler.h urcu/hlist.h urcu/list.h \
                urcu/rculist.h urcu/rcuhlist.h urcu/system.h urcu/futex.h \
                urcu/uatomic/generic.h urcu/arch/generic.h urcu/wfstack.h \
                urcu/wfqueue.h urcu/rculfstack.h urcu/rculfqueue.h \
                urcu/ref.h urcu/map/*.h urcu/static/*.h urcu/cds.h \
 -              urcu/urcu_ref.h urcu/urcu-futex.h urcu/uatomic_arch.h
 +              urcu/urcu_ref.h urcu/urcu-futex.h urcu/uatomic_arch.h \
 +              urcu/rculfhash.h
  nobase_nodist_include_HEADERS = urcu/arch.h urcu/uatomic.h urcu/config.h
  
  EXTRA_DIST = $(top_srcdir)/urcu/arch/*.h $(top_srcdir)/urcu/uatomic/*.h \
                gpl-2.0.txt lgpl-2.1.txt lgpl-relicensing.txt \
                README LICENSE compat_arch_x86.c \
                urcu-call-rcu-impl.h urcu-defer-impl.h \
-               ChangeLog API.txt
 +              rculfhash-internal.h \
+               ChangeLog API.txt \
+               $(top_srcdir)/tests/*.sh
  
  if COMPAT_ARCH
  COMPAT=compat_arch_@ARCHTYPE@.c
@@@ -35,9 -34,6 +36,9 @@@ if COMPAT_FUTE
  COMPAT+=compat_futex.c
  endif
  
 +RCULFHASH = rculfhash.c rculfhash-mm-order.c rculfhash-mm-chunk.c \
 +              rculfhash-mm-mmap.c
 +
  lib_LTLIBRARIES = liburcu-common.la \
                liburcu.la liburcu-qsbr.la \
                liburcu-mb.la liburcu-signal.la liburcu-bp.la \
@@@ -66,7 -62,7 +67,7 @@@ liburcu_signal_la_LIBADD = liburcu-comm
  liburcu_bp_la_SOURCES = urcu-bp.c urcu-pointer.c $(COMPAT)
  liburcu_bp_la_LIBADD = liburcu-common.la
  
 -liburcu_cds_la_SOURCES = rculfqueue.c rculfstack.c $(COMPAT)
 +liburcu_cds_la_SOURCES = rculfqueue.c rculfstack.c $(RCULFHASH) $(COMPAT)
  liburcu_cds_la_LIBADD = liburcu-common.la
  
  pkgconfigdir = $(libdir)/pkgconfig
diff --combined urcu-bp.c
index 3b2062d6590034ad33619ab1372b137237a9fd1e,f3249b43b313decebc29e193b5c82ebf1114a735..912e9b2ea31ad7c42d46a8f9d31f88f6d46a4361
+++ b/urcu-bp.c
@@@ -421,7 -421,28 +421,30 @@@ void rcu_bp_after_fork_child(void
        assert(!ret);
  }
  
+ void *rcu_dereference_sym_bp(void *p)
+ {
+       return _rcu_dereference(p);
+ }
+ void *rcu_set_pointer_sym_bp(void **p, void *v)
+ {
+       cmm_wmb();
+       return uatomic_set(p, v);
+ }
+ void *rcu_xchg_pointer_sym_bp(void **p, void *v)
+ {
+       cmm_wmb();
+       return uatomic_xchg(p, v);
+ }
+ void *rcu_cmpxchg_pointer_sym_bp(void **p, void *old, void *_new)
+ {
+       cmm_wmb();
+       return uatomic_cmpxchg(p, old, _new);
+ }
 +DEFINE_RCU_FLAVOR()
 +
  #include "urcu-call-rcu-impl.h"
  #include "urcu-defer-impl.h"
diff --combined urcu-bp.h
index efb5dca8f92c1186b2187bbfa8ee40f9fa911ab4,34f7a5c0929299385bedd48b04141dc339835b74..3623f358bb520c503bc9e863d176101f679b02de
+++ b/urcu-bp.h
  #include <stdlib.h>
  #include <pthread.h>
  
- /*
-  * See urcu-pointer.h and urcu/static/urcu-pointer.h for pointer
-  * publication headers.
-  */
- #include <urcu-pointer.h>
  #ifdef __cplusplus
  extern "C" {
  #endif
   * rcu_unregister_thread() should be called before the thread exits.
   */
  
+ /*
+  * See urcu-pointer.h and urcu/static/urcu-pointer.h for pointer
+  * publication headers.
+  */
+ #include <urcu-pointer.h>
  #ifdef _LGPL_SOURCE
  
  #include <urcu/static/urcu-bp.h>
  #define rcu_read_lock_bp              _rcu_read_lock
  #define rcu_read_unlock_bp            _rcu_read_unlock
  
+ #define rcu_dereference_bp            rcu_dereference
+ #define rcu_cmpxchg_pointer_bp                rcu_cmpxchg_pointer
+ #define rcu_xchg_pointer_bp           rcu_xchg_pointer
+ #define rcu_set_pointer_bp            rcu_set_pointer
  #else /* !_LGPL_SOURCE */
  
  /*
   * See LGPL-only urcu/static/urcu-pointer.h for documentation.
   */
  
- extern void rcu_read_lock(void);
- extern void rcu_read_unlock(void);
+ extern void rcu_read_lock(void)
+       __attribute__((weak));
+ extern void rcu_read_unlock(void)
+       __attribute__((weak));
+ extern void *rcu_dereference_sym_bp(void *p)
+       __attribute__((weak));
+ #define rcu_dereference_bp(p)                                              \
+       ({                                                                   \
+               typeof(p) _________p1 = URCU_FORCE_CAST(typeof(p),           \
+                       rcu_dereference_sym_bp(URCU_FORCE_CAST(void *, p))); \
+               (_________p1);                                               \
+       })
+ extern void *rcu_cmpxchg_pointer_sym_bp(void **p, void *old, void *_new)
+       __attribute__((weak));
+ #define rcu_cmpxchg_pointer_bp(p, old, _new)                               \
+       ({                                                                   \
+               typeof(*(p)) _________pold = (old);                          \
+               typeof(*(p)) _________pnew = (_new);                         \
+               typeof(*(p)) _________p1 = URCU_FORCE_CAST(typeof(*(p)),     \
+                       rcu_cmpxchg_pointer_sym_bp(URCU_FORCE_CAST(void **, p),\
+                                               _________pold,               \
+                                               _________pnew));             \
+               (_________p1);                                               \
+       })
+ extern void *rcu_xchg_pointer_sym_bp(void **p, void *v)
+       __attribute__((weak));
+ #define rcu_xchg_pointer_bp(p, v)                                          \
+       ({                                                                   \
+               typeof(*(p)) _________pv = (v);                              \
+               typeof(*(p)) _________p1 = URCU_FORCE_CAST(typeof(*(p)),     \
+                       rcu_xchg_pointer_sym_bp(URCU_FORCE_CAST(void **, p), \
+                                            _________pv));                  \
+               (_________p1);                                               \
+       })
+ extern void *rcu_set_pointer_sym_bp(void **p, void *v)
+       __attribute__((weak));
+ #define rcu_set_pointer_bp(p, v)                                           \
+       ({                                                                   \
+               typeof(*(p)) _________pv = (v);                              \
+               typeof(*(p)) _________p1 = URCU_FORCE_CAST(typeof(*(p)),     \
+                       rcu_set_pointer_sym_bp(URCU_FORCE_CAST(void **, p),  \
+                                           _________pv));                   \
+               (_________p1);                                               \
+       })
  
  #endif /* !_LGPL_SOURCE */
  
@@@ -135,6 -186,5 +186,6 @@@ static inline void rcu_thread_online(vo
  
  #include <urcu-call-rcu.h>
  #include <urcu-defer.h>
 +#include <urcu-flavor.h>
  
  #endif /* _URCU_BP_H */
This page took 0.029157 seconds and 4 git commands to generate.