lists: add list splice tail
PATCH 1/6 lists: add list splice tail
From: Con Kolivas <[email protected]>
Add a list_splice_tail variant of list_splice.
Patch-by Peter Zijlstra <[email protected]>
Signed-off-by Con Kolivas <[email protected]>
Cc Ingo Molnar <[email protected]>
Cc Nick Piggin <[email protected]>
Cc "Siddha, Suresh B" <[email protected]>
Signed-off-by Andrew Morton <[email protected]>
---
include/linux/list.h | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+)
include/linux/list.h +42 -0
@@ -333,6 +333,20 @@ static inline void __list_splice(struct at->prev = last; } +static inline void __list_splice_tail (struct list_head *list, +struct list_head *head) +{ +struct list_head *first = list->next; +struct list_head *last = list->prev; +struct list_head *at = head->prev; + + first->prev = at; + at->next = first; + + last->next = head; + head->prev = last; +} +/** * list_splice - join two lists * @list: the new list to add.
@@ -345,6 +359,18 @@ static inline void list_splice(struct li }/** +* list_splice_tail - join two lists at one's tail +* @list: the new list to add. +* @head: the place to add it in the first list. +*/ +static inline void list_splice_tail (struct list_head *list, +struct list_head *head) +{ +if (!list_empty (list)) +__list_splice_tail (list, head); +} + +/** * list_splice_init - join two lists and reinitialise the emptied list. * @list: the new list to add. * @head: the place to add it in the first list.
@@ -417,6 +443,22 @@ static inline void list_splice_init_rcu( }/** +* list_splice_tail_init - join 2 lists at one's tail & reinitialise emptied +* @list: the new list to add. +* @head: the place to add it in the first list. +* +* The list at @list is reinitialised +*/ +static inline void list_splice_tail_init (struct list_head *list, +struct list_head *head) +{ +if (!list_empty (list)) { +__list_splice_tail (list, head); +INIT_LIST_HEAD (list); + } +} + +/** * list_entry - get the struct for this entry * @ptr: the &struct list_head pointer. * @type: the type of the struct this is embedded in.
Signature · 1 line
-ck