This compiler barrier is, at the implementation level, already provided by the
volatile accesses for STORE/LOAD_SHARED. However, given that these primitives
does not provide this guarantee at the high-level (and might use lighter gcc
primitives eventually), we need to add an explicit barrier().
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
STORE_SHARED(rcu_gp_ctr, rcu_gp_ctr + RCU_GP_CTR);
#endif /* !(BITS_PER_LONG < 64) */
+ /*
+ * Enforce compiler-order of store to rcu_gp_ctr before before
+ * load rcu_reader ctr.
+ * This ensures synchronize_rcu() cannot be starved by readers.
+ */
+ barrier();
+
/*
* Wait for each thread rcu_reader_qs_gp count to become 0.
*/