summary |
shortlog |
log |
commit | commitdiff |
tree
raw |
patch |
inline | side by side (from parent 1:
6e32665)
- Forgot a few migration from int to long
- Accelerate fast path by reading a GP variable which already has 1 reader
count. This saves an increment in the fast path.
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
pthread_mutex_t urcu_mutex = PTHREAD_MUTEX_INITIALIZER;
pthread_mutex_t urcu_mutex = PTHREAD_MUTEX_INITIALIZER;
-/* Global grace period counter */
-long urcu_gp_ctr;
+/*
+ * Global grace period counter.
+ * Contains the current RCU_GP_CTR_BIT.
+ * Also has a RCU_GP_CTR_BIT of 1, to accelerate the reader fast path.
+ */
+long urcu_gp_ctr = RCU_GP_COUNT;
long __thread urcu_active_readers;
long __thread urcu_active_readers;
struct reader_data {
pthread_t tid;
struct reader_data {
pthread_t tid;
- int *urcu_active_readers;
+ long *urcu_active_readers;
extern long __thread urcu_active_readers;
extern long __thread urcu_active_readers;
-static inline int rcu_old_gp_ongoing(int *value)
+static inline int rcu_old_gp_ongoing(long *value)
tmp = urcu_active_readers;
debug_yield_read();
if (likely(!(tmp & RCU_GP_CTR_NEST_MASK)))
tmp = urcu_active_readers;
debug_yield_read();
if (likely(!(tmp & RCU_GP_CTR_NEST_MASK)))
- urcu_active_readers = urcu_gp_ctr + RCU_GP_COUNT;
+ urcu_active_readers = urcu_gp_ctr;
else
urcu_active_readers = tmp + RCU_GP_COUNT;
debug_yield_read();
else
urcu_active_readers = tmp + RCU_GP_COUNT;
debug_yield_read();