-void rcu_lfs_push(struct rcu_lfs_stack *s, struct rcu_lfs_node *node)
-{
- rcu_read_lock();
- for (;;) {
- struct rcu_lfs_node *head = rcu_dereference(s->head);
-
- node->next = head;
- /*
- * uatomic_cmpxchg() implicit memory barrier orders earlier
- * stores to node before publication.
- */
- if (uatomic_cmpxchg(&s->head, head, node) == head) {
- rcu_read_unlock();
- return;
- } else {
- /* Failure to prepend. Retry. */
- continue;
- }
- }
-}
+#define cds_lfs_node_init_rcu_qsbr _cds_lfs_node_init_rcu
+#define cds_lfs_init_rcu_qsbr _cds_lfs_init_rcu
+#define cds_lfs_push_rcu_qsbr _cds_lfs_push_rcu
+#define cds_lfs_pop_rcu_qsbr _cds_lfs_pop_rcu
+
+#define cds_lfs_node_init_rcu_bp _cds_lfs_node_init_rcu
+#define cds_lfs_init_rcu_bp _cds_lfs_init_rcu
+#define cds_lfs_push_rcu_bp _cds_lfs_push_rcu
+#define cds_lfs_pop_rcu_bp _cds_lfs_pop_rcu
+
+#define cds_lfs_node_init_rcu_memb _cds_lfs_node_init_rcu
+#define cds_lfs_init_rcu_memb _cds_lfs_init_rcu
+#define cds_lfs_push_rcu_memb _cds_lfs_push_rcu
+#define cds_lfs_pop_rcu_memb _cds_lfs_pop_rcu
+
+#define cds_lfs_node_init_rcu_mb _cds_lfs_node_init_rcu
+#define cds_lfs_init_rcu_mb _cds_lfs_init_rcu
+#define cds_lfs_push_rcu_mb _cds_lfs_push_rcu
+#define cds_lfs_pop_rcu_mb _cds_lfs_pop_rcu
+
+#define cds_lfs_node_init_rcu_sig _cds_lfs_node_init_rcu
+#define cds_lfs_init_rcu_sig _cds_lfs_init_rcu
+#define cds_lfs_push_rcu_sig _cds_lfs_push_rcu
+#define cds_lfs_pop_rcu_sig _cds_lfs_pop_rcu
+
+#else /* !_LGPL_SOURCE */