From: Mathieu Desnoyers Date: Mon, 8 Feb 2010 13:18:08 +0000 (-0500) Subject: urcu: use unsigned long instead of long X-Git-Tag: v0.4.1~7 X-Git-Url: https://git.lttng.org./?a=commitdiff_plain;h=27d65bc5db18f8563a9120924569acffb845ec4d;p=userspace-rcu.git urcu: use unsigned long instead of long As it is currently designed, urcu scheme never overflows and we do not use the upper "sign" bit. But, nevertheless, just in case we choose to do it differently in the future, use an unsigned long type to allow: - overflow - defined used of 0x80000000 Signed-off-by: Mathieu Desnoyers --- diff --git a/urcu-static.h b/urcu-static.h index f2c452a..b465ce4 100644 --- a/urcu-static.h +++ b/urcu-static.h @@ -207,7 +207,7 @@ static inline void smp_mb_slave(int group) */ #define RCU_GP_COUNT (1UL << 0) /* Use the amount of bits equal to half of the architecture long size */ -#define RCU_GP_CTR_PHASE (1UL << (sizeof(long) << 2)) +#define RCU_GP_CTR_PHASE (1UL << (sizeof(unsigned long) << 2)) #define RCU_GP_CTR_NEST_MASK (RCU_GP_CTR_PHASE - 1) /* @@ -215,11 +215,11 @@ static inline void smp_mb_slave(int group) * Using a int rather than a char to eliminate false register dependencies * causing stalls on some architectures. */ -extern long rcu_gp_ctr; +extern unsigned long rcu_gp_ctr; struct rcu_reader { /* Data used by both reader and synchronize_rcu() */ - long ctr; + unsigned long ctr; char need_mb; /* Data used for registry */ struct list_head head __attribute__((aligned(CACHE_LINE_SIZE))); @@ -242,9 +242,9 @@ static inline void wake_up_gp(void) } } -static inline int rcu_old_gp_ongoing(long *value) +static inline int rcu_old_gp_ongoing(unsigned long *value) { - long v; + unsigned long v; if (value == NULL) return 0; @@ -259,7 +259,7 @@ static inline int rcu_old_gp_ongoing(long *value) static inline void _rcu_read_lock(void) { - long tmp; + unsigned long tmp; tmp = rcu_reader.ctr; /* @@ -280,7 +280,7 @@ static inline void _rcu_read_lock(void) static inline void _rcu_read_unlock(void) { - long tmp; + unsigned long tmp; tmp = rcu_reader.ctr; /* diff --git a/urcu.c b/urcu.c index 5e8c612..140cd19 100644 --- a/urcu.c +++ b/urcu.c @@ -67,7 +67,7 @@ int gp_futex; * Also has a RCU_GP_COUNT of 1, to accelerate the reader fast path. * Written to only by writer with mutex taken. Read by both writer and readers. */ -long rcu_gp_ctr = RCU_GP_COUNT; +unsigned long rcu_gp_ctr = RCU_GP_COUNT; /* * Written to only by each individual reader. Read by both the reader and the