From: Mathieu Desnoyers Date: Mon, 9 Feb 2009 18:52:41 +0000 (-0500) Subject: Fix int->long and keep a reader count of 1 in the global GP variable X-Git-Tag: v0.1~300 X-Git-Url: https://git.lttng.org./?a=commitdiff_plain;h=128166c908bfaa915c76e060522abd20241ac69c;p=userspace-rcu.git Fix int->long and keep a reader count of 1 in the global GP variable - 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 --- diff --git a/urcu.c b/urcu.c index 53c7f37..d4a0684 100644 --- a/urcu.c +++ b/urcu.c @@ -19,8 +19,12 @@ 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; @@ -29,7 +33,7 @@ long __thread urcu_active_readers; struct reader_data { pthread_t tid; - int *urcu_active_readers; + long *urcu_active_readers; }; #ifdef DEBUG_YIELD diff --git a/urcu.h b/urcu.h index 444d9cd..9e9fea2 100644 --- a/urcu.h +++ b/urcu.h @@ -179,7 +179,7 @@ extern long urcu_gp_ctr; extern long __thread urcu_active_readers; -static inline int rcu_old_gp_ongoing(int *value) +static inline int rcu_old_gp_ongoing(long *value) { long v; @@ -200,7 +200,7 @@ static inline void rcu_read_lock(void) 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();