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