+#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)