+ smp_mb();
+
+ switch_next_urcu_qparity(); /* 1 -> 0 */
+
+ /*
+ * Must commit qparity update to memory before waiting for parity
+ * 1 quiescent state. Failure to do so could result in the writer
+ * waiting forever while new readers are always accessing data (no
+ * progress).
+ */
+ smp_mb();
+
+ /*
+ * Wait for previous parity to be empty of readers.
+ */
+ wait_for_quiescent_state(); /* Wait readers in parity 1 */
+
+ internal_urcu_unlock();
+
+ /* All threads should finish using the data referred to by old ptr
+ * before decrementing their urcu_active_readers count */
+ /* Finish waiting for reader threads before letting the old ptr being
+ * freed. */
+ force_mb_all_threads();