* data read before the pointer read by speculating the value of the pointer.
* Correct ordering is ensured because the pointer is read as a volatile access.
* This acts as a global side-effect operation, which forbids reordering of
- * dependent memory operations.
+ * dependent memory operations. Note that such concern about dependency-breaking
+ * optimizations will eventually be taken care of by the "memory_order_consume"
+ * addition to forthcoming C++ standard.
*
* Should match rcu_assign_pointer() or rcu_xchg_pointer().
*/
*/
#define KICK_READER_LOOPS 10000
+#ifdef DEBUG_RCU
+#define rcu_assert(args...) assert(args)
+#else
+#define rcu_assert(args...)
+#endif
+
#ifdef DEBUG_YIELD
#include <sched.h>
#include <time.h>
#define YIELD_WRITE (1 << 1)
/*
- * Updates without CONFIG_URCU_AVOID_SIGNALS are much slower. Account this in
+ * Updates without URCU_MB are much slower. Account this in
* the delay.
*/
-#ifdef CONFIG_URCU_AVOID_SIGNALS
+#ifdef URCU_MB
/* maximum sleep delay, in us */
#define MAX_SLEEP 50
#else
}
#endif
-#ifdef CONFIG_URCU_AVOID_SIGNALS
+#ifdef URCU_MB
static inline void reader_barrier()
{
smp_mb();