if ((gp_ctr = CMM_LOAD_SHARED(rcu_gp.ctr)) == URCU_TLS(rcu_reader).ctr)
return;
_rcu_quiescent_state_update_and_wakeup(gp_ctr);
if ((gp_ctr = CMM_LOAD_SHARED(rcu_gp.ctr)) == URCU_TLS(rcu_reader).ctr)
return;
_rcu_quiescent_state_update_and_wakeup(gp_ctr);
cmm_smp_mb();
CMM_STORE_SHARED(URCU_TLS(rcu_reader).ctr, 0);
cmm_smp_mb(); /* write URCU_TLS(rcu_reader).ctr before read futex */
cmm_smp_mb();
CMM_STORE_SHARED(URCU_TLS(rcu_reader).ctr, 0);
cmm_smp_mb(); /* write URCU_TLS(rcu_reader).ctr before read futex */
cmm_barrier(); /* Ensure the compiler does not reorder us with mutex */
_CMM_STORE_SHARED(URCU_TLS(rcu_reader).ctr, CMM_LOAD_SHARED(rcu_gp.ctr));
cmm_smp_mb();
cmm_barrier(); /* Ensure the compiler does not reorder us with mutex */
_CMM_STORE_SHARED(URCU_TLS(rcu_reader).ctr, CMM_LOAD_SHARED(rcu_gp.ctr));
cmm_smp_mb();