+static inline
+int is_dummy(struct cds_lfq_node_rcu *node)
+{
+ return ((unsigned long) node) & 0x1UL;
+}
+
+static inline
+struct cds_lfq_node_rcu *make_dummy(struct cds_lfq_queue_rcu *q,
+ struct cds_lfq_node_rcu *next)
+{
+ struct cds_lfq_node_rcu_dummy *dummy;
+
+ dummy = malloc(sizeof(struct cds_lfq_node_rcu_dummy));
+ assert(dummy);
+ dummy->parent.next = next;
+ dummy->q = q;
+ return (struct cds_lfq_node_rcu *) (((unsigned long) &dummy->parent) | 0x1UL);
+}
+
+static inline
+struct cds_lfq_node_rcu *get_node(struct cds_lfq_node_rcu *node)
+{
+ return (struct cds_lfq_node_rcu *) (((unsigned long )node) & ~0x1UL);
+}
+
+static inline
+void free_dummy(struct rcu_head *head)
+{
+ struct cds_lfq_node_rcu_dummy *dummy =
+ caa_container_of(head, struct cds_lfq_node_rcu_dummy, head);
+ free(dummy);
+}
+
+static inline
+void rcu_free_dummy(struct cds_lfq_node_rcu *node)
+{
+ struct cds_lfq_node_rcu_dummy *dummy;