Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 10aa9d2c authored by Franck Bui-Huu's avatar Franck Bui-Huu Committed by Ingo Molnar
Browse files

rculist.h: use the rcu API



Make almost all list mutation primitives use rcu_assign_pointer().

The main point of this being readability improvement.

Signed-off-by: default avatarFranck Bui-Huu <fbuihuu@gmail.com>
Cc: "Paul E. McKenney" <paulmck@us.ibm.com>
Cc: Josh Triplett <josh@kernel.org>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
parent 82524746
Loading
Loading
Loading
Loading
+9 −14
Original line number Diff line number Diff line
@@ -7,6 +7,7 @@
 * RCU-protected list version
 */
#include <linux/list.h>
#include <linux/rcupdate.h>

/*
 * Insert a new entry between two known consecutive entries.
@@ -19,9 +20,8 @@ static inline void __list_add_rcu(struct list_head *new,
{
	new->next = next;
	new->prev = prev;
	smp_wmb();
	rcu_assign_pointer(prev->next, new);
	next->prev = new;
	prev->next = new;
}

/**
@@ -110,9 +110,8 @@ static inline void list_replace_rcu(struct list_head *old,
{
	new->next = old->next;
	new->prev = old->prev;
	smp_wmb();
	rcu_assign_pointer(new->prev->next, new);
	new->next->prev = new;
	new->prev->next = new;
	old->prev = LIST_POISON2;
}

@@ -166,8 +165,7 @@ static inline void list_splice_init_rcu(struct list_head *list,
	 */

	last->next = at;
	smp_wmb();
	head->next = first;
	rcu_assign_pointer(head->next, first);
	first->prev = head;
	at->prev = last;
}
@@ -280,10 +278,9 @@ static inline void hlist_replace_rcu(struct hlist_node *old,

	new->next = next;
	new->pprev = old->pprev;
	smp_wmb();
	rcu_assign_pointer(*new->pprev, new);
	if (next)
		new->next->pprev = &new->next;
	*new->pprev = new;
	old->pprev = LIST_POISON2;
}

@@ -310,12 +307,12 @@ static inline void hlist_add_head_rcu(struct hlist_node *n,
					struct hlist_head *h)
{
	struct hlist_node *first = h->first;

	n->next = first;
	n->pprev = &h->first;
	smp_wmb();
	rcu_assign_pointer(h->first, n);
	if (first)
		first->pprev = &n->next;
	h->first = n;
}

/**
@@ -341,9 +338,8 @@ static inline void hlist_add_before_rcu(struct hlist_node *n,
{
	n->pprev = next->pprev;
	n->next = next;
	smp_wmb();
	rcu_assign_pointer(*(n->pprev), n);
	next->pprev = &n->next;
	*(n->pprev) = n;
}

/**
@@ -369,8 +365,7 @@ static inline void hlist_add_after_rcu(struct hlist_node *prev,
{
	n->next = prev->next;
	n->pprev = &prev->next;
	smp_wmb();
	prev->next = n;
	rcu_assign_pointer(prev->next, n);
	if (n->next)
		n->next->pprev = &n->next;
}