-/*
- * Limiting the nesting level to 256 to keep instructions small in the read
- * fast-path.
- */
-#define RCU_GP_COUNT (1U << 0)
-#define RCU_GP_CTR_BIT (1U << 8)
-#define RCU_GP_CTR_NEST_MASK (RCU_GP_CTR_BIT - 1)
-
-/* Global quiescent period counter with low-order bits unused. */
-extern int urcu_gp_ctr;
-
-extern int __thread urcu_active_readers;
-
-static inline int rcu_old_gp_ongoing(int *value)
-{
- int v;
-
- if (value == NULL)
- return 0;
- debug_yield_write();
- v = ACCESS_ONCE(*value);
- debug_yield_write();
- return (v & RCU_GP_CTR_NEST_MASK) &&
- ((v ^ ACCESS_ONCE(urcu_gp_ctr)) & RCU_GP_CTR_BIT);
-}
-
-static inline void rcu_read_lock(void)
-{
- int tmp;
-
- debug_yield_read();
- tmp = urcu_active_readers;
- debug_yield_read();
- if (!(tmp & RCU_GP_CTR_NEST_MASK))
- urcu_active_readers = urcu_gp_ctr + RCU_GP_COUNT;
- else
- urcu_active_readers = tmp + RCU_GP_COUNT;
- debug_yield_read();
- /*
- * Increment active readers count before accessing the pointer.
- * See force_mb_all_threads().
- */
- barrier();
- debug_yield_read();
-}
-
-static inline void rcu_read_unlock(void)
-{
- debug_yield_read();
- barrier();
- debug_yield_read();
- /*
- * Finish using rcu before decrementing the pointer.
- * See force_mb_all_threads().
- */
- urcu_active_readers -= RCU_GP_COUNT;
- debug_yield_read();
-}
-
-extern void *urcu_publish_content(void **ptr, void *new);