Map symbols to allow multiple RCU flavors to be used in one binary
[urcu.git] / urcu-qsbr.c
index 69effd5ad8b52e3be4ee263ede2cafe81816f38b..8dcad33e3d6297111b4967846af177ea8f0fc5f8 100644 (file)
@@ -32,6 +32,8 @@
 #include <errno.h>
 #include <poll.h>
 
+#include "urcu-qsbr-map.h"
+
 #define BUILD_QSBR_LIB
 #include "urcu-qsbr-static.h"
 /* Do not #define _LGPL_SOURCE to ensure we can emit the wrapper symbols */
@@ -121,10 +123,11 @@ static void update_counter_and_wait(void)
 #endif /* !(CAA_BITS_PER_LONG < 64) */
 
        /*
-        * Must commit rcu_gp_ctr update to memory before waiting for quiescent
-        * state. Failure to do so could result in the writer waiting forever
-        * while new readers are always accessing data (no progress). Enforce
-        * compiler-order of store to rcu_gp_ctr before load rcu_reader ctr.
+        * Must commit rcu_gp_ctr update to memory before waiting for
+        * quiescent state. Failure to do so could result in the writer
+        * waiting forever while new readers are always accessing data
+        * (no progress). Enforce compiler-order of store to rcu_gp_ctr
+        * before load rcu_reader ctr.
         */
        cmm_barrier();
 
@@ -194,8 +197,8 @@ void synchronize_rcu(void)
 
        /*
         * Mark the writer thread offline to make sure we don't wait for
-        * our own quiescent state. This allows using synchronize_rcu() in
-        * threads registered as readers.
+        * our own quiescent state. This allows using synchronize_rcu()
+        * in threads registered as readers.
         */
        if (was_online)
                CMM_STORE_SHARED(rcu_reader.ctr, 0);
@@ -212,10 +215,11 @@ void synchronize_rcu(void)
 
        /*
         * Must finish waiting for quiescent state for parity 0 before
-        * committing next rcu_gp_ctr update to memory. Failure to do so could
-        * result in the writer waiting forever while new readers are always
-        * accessing data (no progress).  Enforce compiler-order of load
-        * rcu_reader ctr before store to rcu_gp_ctr.
+        * committing next rcu_gp_ctr update to memory. Failure to
+        * do so could result in the writer waiting forever while new
+        * readers are always accessing data (no progress).  Enforce
+        * compiler-order of load rcu_reader ctr before store to
+        * rcu_gp_ctr.
         */
        cmm_barrier();
 
@@ -238,7 +242,8 @@ out:
         * freed.
         */
        if (was_online)
-               _CMM_STORE_SHARED(rcu_reader.ctr, CMM_LOAD_SHARED(rcu_gp_ctr));
+               _CMM_STORE_SHARED(rcu_reader.ctr,
+                                 CMM_LOAD_SHARED(rcu_gp_ctr));
        cmm_smp_mb();
 }
 #else /* !(CAA_BITS_PER_LONG < 64) */
@@ -250,8 +255,8 @@ void synchronize_rcu(void)
 
        /*
         * Mark the writer thread offline to make sure we don't wait for
-        * our own quiescent state. This allows using synchronize_rcu() in
-        * threads registered as readers.
+        * our own quiescent state. This allows using synchronize_rcu()
+        * in threads registered as readers.
         */
        cmm_smp_mb();
        if (was_online)
@@ -265,7 +270,8 @@ out:
        mutex_unlock(&rcu_gp_lock);
 
        if (was_online)
-               _CMM_STORE_SHARED(rcu_reader.ctr, CMM_LOAD_SHARED(rcu_gp_ctr));
+               _CMM_STORE_SHARED(rcu_reader.ctr,
+                                 CMM_LOAD_SHARED(rcu_gp_ctr));
        cmm_smp_mb();
 }
 #endif  /* !(CAA_BITS_PER_LONG < 64) */
@@ -326,3 +332,5 @@ void rcu_exit(void)
 {
        assert(cds_list_empty(&registry));
 }
+
+#include "urcu-call-rcu-impl.h"
This page took 0.022982 seconds and 4 git commands to generate.