urcu: use unsigned long instead of long
authorMathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
Mon, 8 Feb 2010 13:18:08 +0000 (08:18 -0500)
committerMathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
Mon, 8 Feb 2010 13:18:08 +0000 (08:18 -0500)
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 <mathieu.desnoyers@polymtl.ca>
urcu-static.h
urcu.c

index f2c452a64edd4c2aa781e5dd867276f8e2f46525..b465ce40a3f020dcfbbfb4226c53356a6c56b953 100644 (file)
@@ -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 5e8c6127a8c2f6413d56e95f66eba8c827595c85..140cd19b98add54f276755e08b13bfad9e8c3d0c 100644 (file)
--- 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
This page took 0.027204 seconds and 4 git commands to generate.