urcu-qsbr: document compiler barrier
authorMathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
Sun, 14 Mar 2010 14:27:23 +0000 (10:27 -0400)
committerMathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
Sun, 14 Mar 2010 14:27:23 +0000 (10:27 -0400)
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>
urcu-qsbr.c

index 84789f2ebfdd4fa89def6fb56274595739a51d02..25074d09063a60ae5c94a17b18cd9d241b1e2fb9 100644 (file)
@@ -120,6 +120,13 @@ static void update_counter_and_wait(void)
        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.
         */
This page took 0.025536 seconds and 4 git commands to generate.