Add library version information
[urcu.git] / urcu-bp-static.h
index dabf4c30a00cc30dd93ee688eb1364913d8f3b26..14c6cfecac3af01a3bc4680c36381736f37a30f7 100644 (file)
@@ -9,7 +9,7 @@
  * TO BE INCLUDED ONLY IN LGPL-COMPATIBLE CODE. See urcu.h for linking
  * dynamically with the userspace rcu library.
  *
- * Copyright (c) 2009 Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
+ * Copyright (c) 2009 Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
  * Copyright (c) 2009 Paul E. McKenney, IBM Corporation.
  *
  * This library is free software; you can redistribute it and/or
@@ -140,7 +140,7 @@ struct rcu_reader {
        /* Data used by both reader and synchronize_rcu() */
        long ctr;
        /* Data used for registry */
-       struct list_head node __attribute__((aligned(CACHE_LINE_SIZE)));
+       struct cds_list_head node __attribute__((aligned(CAA_CACHE_LINE_SIZE)));
        pthread_t tid;
        int alloc;      /* registry entry allocated */
 };
@@ -162,7 +162,7 @@ static inline int rcu_old_gp_ongoing(long *value)
         * Make sure both tests below are done on the same version of *value
         * to insure consistency.
         */
-       v = LOAD_SHARED(*value);
+       v = CMM_LOAD_SHARED(*value);
        return (v & RCU_GP_CTR_NEST_MASK) &&
                 ((v ^ rcu_gp_ctr) & RCU_GP_CTR_PHASE);
 }
@@ -175,20 +175,21 @@ static inline void _rcu_read_lock(void)
        if (unlikely(!rcu_reader))
                rcu_bp_register();
 
+       cmm_barrier();  /* Ensure the compiler does not reorder us with mutex */
        tmp = rcu_reader->ctr;
        /*
         * rcu_gp_ctr is
         *   RCU_GP_COUNT | (~RCU_GP_CTR_PHASE or RCU_GP_CTR_PHASE)
         */
        if (likely(!(tmp & RCU_GP_CTR_NEST_MASK))) {
-               _STORE_SHARED(rcu_reader->ctr, _LOAD_SHARED(rcu_gp_ctr));
+               _CMM_STORE_SHARED(rcu_reader->ctr, _CMM_LOAD_SHARED(rcu_gp_ctr));
                /*
                 * Set active readers count for outermost nesting level before
                 * accessing the pointer.
                 */
-               smp_mb();
+               cmm_smp_mb();
        } else {
-               _STORE_SHARED(rcu_reader->ctr, tmp + RCU_GP_COUNT);
+               _CMM_STORE_SHARED(rcu_reader->ctr, tmp + RCU_GP_COUNT);
        }
 }
 
@@ -197,8 +198,9 @@ static inline void _rcu_read_unlock(void)
        /*
         * Finish using rcu before decrementing the pointer.
         */
-       smp_mb();
-       _STORE_SHARED(rcu_reader->ctr, rcu_reader->ctr - RCU_GP_COUNT);
+       cmm_smp_mb();
+       _CMM_STORE_SHARED(rcu_reader->ctr, rcu_reader->ctr - RCU_GP_COUNT);
+       cmm_barrier();  /* Ensure the compiler does not reorder us with mutex */
 }
 
 #ifdef __cplusplus 
This page took 0.023848 seconds and 4 git commands to generate.