1e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#ifndef _LINUX_LIST_H
2e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#define _LINUX_LIST_H
3e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
4e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#include "poison.h"
5e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
6e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#define LIST_HEAD_INIT(name) { &(name), &(name) }
7e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
8e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#define LIST_HEAD(name) \
9e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	struct list_head name = LIST_HEAD_INIT(name)
10e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
11e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengstatic inline void INIT_LIST_HEAD(struct list_head *list)
12e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng{
13e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	list->next = list;
14e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	list->prev = list;
15e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng}
16e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
17e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng/*
18e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * Insert a new entry between two known consecutive entries.
19e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng *
20e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * This is only for internal list manipulation where we know
21e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * the prev/next entries already!
22e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng */
23e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#ifndef CONFIG_DEBUG_LIST
24e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengstatic inline void __list_add(struct list_head *new,
25e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng			      struct list_head *prev,
26e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng			      struct list_head *next)
27e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng{
28e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	next->prev = new;
29e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	new->next = next;
30e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	new->prev = prev;
31e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	prev->next = new;
32e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng}
33e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#else
34e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengextern void __list_add(struct list_head *new,
35e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng			      struct list_head *prev,
36e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng			      struct list_head *next);
37e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#endif
38e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
39e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng/**
40e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * list_add - add a new entry
41e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * @new: new entry to be added
42e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * @head: list head to add it after
43e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng *
44e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * Insert a new entry after the specified head.
45e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * This is good for implementing stacks.
46e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng */
47e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengstatic inline void list_add(struct list_head *new, struct list_head *head)
48e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng{
49e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	__list_add(new, head, head->next);
50e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng}
51e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
52e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
53e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng/**
54e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * list_add_tail - add a new entry
55e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * @new: new entry to be added
56e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * @head: list head to add it before
57e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng *
58e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * Insert a new entry before the specified head.
59e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * This is useful for implementing queues.
60e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng */
61e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengstatic inline void list_add_tail(struct list_head *new, struct list_head *head)
62e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng{
63e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	__list_add(new, head->prev, head);
64e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng}
65e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
66e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng/*
67e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * Delete a list entry by making the prev/next entries
68e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * point to each other.
69e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng *
70e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * This is only for internal list manipulation where we know
71e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * the prev/next entries already!
72e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng */
73e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengstatic inline void __list_del(struct list_head * prev, struct list_head * next)
74e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng{
75e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	next->prev = prev;
76e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	prev->next = next;
77e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng}
78e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
79e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng/**
80e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * list_del - deletes entry from list.
81e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * @entry: the element to delete from the list.
82e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * Note: list_empty() on entry does not return true after this, the entry is
83e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * in an undefined state.
84e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng */
85e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#ifndef CONFIG_DEBUG_LIST
86e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengstatic inline void list_del(struct list_head *entry)
87e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng{
88e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	__list_del(entry->prev, entry->next);
89e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	entry->next = LIST_POISON1;
90e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	entry->prev = LIST_POISON2;
91e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng}
92e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#else
93e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengextern void list_del(struct list_head *entry);
94e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#endif
95e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
96e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng/**
97e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * list_replace - replace old entry by new one
98e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * @old : the element to be replaced
99e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * @new : the new element to insert
100e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng *
101e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * If @old was empty, it will be overwritten.
102e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng */
103e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengstatic inline void list_replace(struct list_head *old,
104e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng				struct list_head *new)
105e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng{
106e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	new->next = old->next;
107e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	new->next->prev = new;
108e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	new->prev = old->prev;
109e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	new->prev->next = new;
110e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng}
111e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
112e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengstatic inline void list_replace_init(struct list_head *old,
113e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng					struct list_head *new)
114e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng{
115e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	list_replace(old, new);
116e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	INIT_LIST_HEAD(old);
117e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng}
118e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
119e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng/**
120e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * list_del_init - deletes entry from list and reinitialize it.
121e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * @entry: the element to delete from the list.
122e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng */
123e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengstatic inline void list_del_init(struct list_head *entry)
124e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng{
125e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	__list_del(entry->prev, entry->next);
126e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	INIT_LIST_HEAD(entry);
127e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng}
128e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
129e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng/**
130e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * list_move - delete from one list and add as another's head
131e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * @list: the entry to move
132e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * @head: the head that will precede our entry
133e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng */
134e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengstatic inline void list_move(struct list_head *list, struct list_head *head)
135e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng{
136e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	__list_del(list->prev, list->next);
137e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	list_add(list, head);
138e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng}
139e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
140e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng/**
141e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * list_move_tail - delete from one list and add as another's tail
142e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * @list: the entry to move
143e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * @head: the head that will follow our entry
144e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng */
145e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengstatic inline void list_move_tail(struct list_head *list,
146e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng				  struct list_head *head)
147e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng{
148e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	__list_del(list->prev, list->next);
149e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	list_add_tail(list, head);
150e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng}
151e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
152e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng/**
153e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * list_is_last - tests whether @list is the last entry in list @head
154e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * @list: the entry to test
155e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * @head: the head of the list
156e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng */
157e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengstatic inline int list_is_last(const struct list_head *list,
158e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng				const struct list_head *head)
159e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng{
160e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	return list->next == head;
161e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng}
162e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
163e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng/**
164e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * list_empty - tests whether a list is empty
165e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * @head: the list to test.
166e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng */
167e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengstatic inline int list_empty(const struct list_head *head)
168e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng{
169e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	return head->next == head;
170e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng}
171e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
172e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng/**
173e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * list_empty_careful - tests whether a list is empty and not being modified
174e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * @head: the list to test
175e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng *
176e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * Description:
177e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * tests whether a list is empty _and_ checks that no other CPU might be
178e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * in the process of modifying either member (next or prev)
179e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng *
180e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * NOTE: using list_empty_careful() without synchronization
181e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * can only be safe if the only activity that can happen
182e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * to the list entry is list_del_init(). Eg. it cannot be used
183e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * if another CPU could re-list_add() it.
184e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng */
185e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengstatic inline int list_empty_careful(const struct list_head *head)
186e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng{
187e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	struct list_head *next = head->next;
188e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	return (next == head) && (next == head->prev);
189e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng}
190e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
191e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng/**
192e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * list_rotate_left - rotate the list to the left
193e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * @head: the head of the list
194e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng */
195e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengstatic inline void list_rotate_left(struct list_head *head)
196e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng{
197e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	struct list_head *first;
198e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
199e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	if (!list_empty(head)) {
200e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng		first = head->next;
201e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng		list_move_tail(first, head);
202e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	}
203e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng}
204e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
205e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng/**
206e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * list_is_singular - tests whether a list has just one entry.
207e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * @head: the list to test.
208e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng */
209e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengstatic inline int list_is_singular(const struct list_head *head)
210e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng{
211e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	return !list_empty(head) && (head->next == head->prev);
212e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng}
213e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
214e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengstatic inline void __list_cut_position(struct list_head *list,
215e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng		struct list_head *head, struct list_head *entry)
216e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng{
217e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	struct list_head *new_first = entry->next;
218e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	list->next = head->next;
219e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	list->next->prev = list;
220e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	list->prev = entry;
221e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	entry->next = list;
222e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	head->next = new_first;
223e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	new_first->prev = head;
224e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng}
225e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
226e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng/**
227e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * list_cut_position - cut a list into two
228e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * @list: a new list to add all removed entries
229e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * @head: a list with entries
230e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * @entry: an entry within head, could be the head itself
231e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng *	and if so we won't cut the list
232e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng *
233e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * This helper moves the initial part of @head, up to and
234e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * including @entry, from @head to @list. You should
235e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * pass on @entry an element you know is on @head. @list
236e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * should be an empty list or a list you do not care about
237e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * losing its data.
238e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng *
239e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng */
240e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengstatic inline void list_cut_position(struct list_head *list,
241e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng		struct list_head *head, struct list_head *entry)
242e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng{
243e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	if (list_empty(head))
244e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng		return;
245e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	if (list_is_singular(head) &&
246e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng		(head->next != entry && head != entry))
247e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng		return;
248e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	if (entry == head)
249e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng		INIT_LIST_HEAD(list);
250e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	else
251e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng		__list_cut_position(list, head, entry);
252e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng}
253e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
254e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengstatic inline void __list_splice(const struct list_head *list,
255e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng				 struct list_head *prev,
256e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng				 struct list_head *next)
257e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng{
258e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	struct list_head *first = list->next;
259e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	struct list_head *last = list->prev;
260e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
261e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	first->prev = prev;
262e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	prev->next = first;
263e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
264e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	last->next = next;
265e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	next->prev = last;
266e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng}
267e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
268e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng/**
269e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * list_splice - join two lists, this is designed for stacks
270e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * @list: the new list to add.
271e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * @head: the place to add it in the first list.
272e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng */
273e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengstatic inline void list_splice(const struct list_head *list,
274e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng				struct list_head *head)
275e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng{
276e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	if (!list_empty(list))
277e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng		__list_splice(list, head, head->next);
278e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng}
279e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
280e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng/**
281e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * list_splice_tail - join two lists, each list being a queue
282e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * @list: the new list to add.
283e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * @head: the place to add it in the first list.
284e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng */
285e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengstatic inline void list_splice_tail(struct list_head *list,
286e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng				struct list_head *head)
287e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng{
288e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	if (!list_empty(list))
289e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng		__list_splice(list, head->prev, head);
290e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng}
291e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
292e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng/**
293e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * list_splice_init - join two lists and reinitialise the emptied list.
294e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * @list: the new list to add.
295e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * @head: the place to add it in the first list.
296e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng *
297e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * The list at @list is reinitialised
298e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng */
299e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengstatic inline void list_splice_init(struct list_head *list,
300e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng				    struct list_head *head)
301e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng{
302e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	if (!list_empty(list)) {
303e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng		__list_splice(list, head, head->next);
304e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng		INIT_LIST_HEAD(list);
305e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	}
306e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng}
307e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
308e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng/**
309e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * list_splice_tail_init - join two lists and reinitialise the emptied list
310e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * @list: the new list to add.
311e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * @head: the place to add it in the first list.
312e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng *
313e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * Each of the lists is a queue.
314e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * The list at @list is reinitialised
315e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng */
316e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengstatic inline void list_splice_tail_init(struct list_head *list,
317e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng					 struct list_head *head)
318e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng{
319e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	if (!list_empty(list)) {
320e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng		__list_splice(list, head->prev, head);
321e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng		INIT_LIST_HEAD(list);
322e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	}
323e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng}
324e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
325e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng/**
326e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * list_entry - get the struct for this entry
327e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * @ptr:	the &struct list_head pointer.
328e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * @type:	the type of the struct this is embedded in.
329e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * @member:	the name of the list_struct within the struct.
330e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng */
331e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#define list_entry(ptr, type, member) \
332e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	container_of(ptr, type, member)
333e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
334e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng/**
335e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * list_first_entry - get the first element from a list
336e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * @ptr:	the list head to take the element from.
337e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * @type:	the type of the struct this is embedded in.
338e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * @member:	the name of the list_struct within the struct.
339e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng *
340e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * Note, that list is expected to be not empty.
341e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng */
342e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#define list_first_entry(ptr, type, member) \
343e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	list_entry((ptr)->next, type, member)
344e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
345e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng/**
346e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * list_for_each	-	iterate over a list
347e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * @pos:	the &struct list_head to use as a loop cursor.
348e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * @head:	the head for your list.
349e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng */
350e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#define list_for_each(pos, head) \
351e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	for (pos = (head)->next; prefetch(pos->next), pos != (head); \
352e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng        	pos = pos->next)
353e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
354e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng/**
355e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * __list_for_each	-	iterate over a list
356e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * @pos:	the &struct list_head to use as a loop cursor.
357e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * @head:	the head for your list.
358e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng *
359e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * This variant differs from list_for_each() in that it's the
360e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * simplest possible list iteration code, no prefetching is done.
361e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * Use this for code that knows the list to be very short (empty
362e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * or 1 entry) most of the time.
363e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng */
364e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#define __list_for_each(pos, head) \
365e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	for (pos = (head)->next; pos != (head); pos = pos->next)
366e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
367e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng/**
368e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * list_for_each_prev	-	iterate over a list backwards
369e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * @pos:	the &struct list_head to use as a loop cursor.
370e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * @head:	the head for your list.
371e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng */
372e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#define list_for_each_prev(pos, head) \
373e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	for (pos = (head)->prev; prefetch(pos->prev), pos != (head); \
374e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng        	pos = pos->prev)
375e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
376e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng/**
377e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * list_for_each_safe - iterate over a list safe against removal of list entry
378e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * @pos:	the &struct list_head to use as a loop cursor.
379e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * @n:		another &struct list_head to use as temporary storage
380e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * @head:	the head for your list.
381e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng */
382e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#define list_for_each_safe(pos, n, head) \
383e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	for (pos = (head)->next, n = pos->next; pos != (head); \
384e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng		pos = n, n = pos->next)
385e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
386e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng/**
387e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * list_for_each_prev_safe - iterate over a list backwards safe against removal of list entry
388e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * @pos:	the &struct list_head to use as a loop cursor.
389e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * @n:		another &struct list_head to use as temporary storage
390e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * @head:	the head for your list.
391e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng */
392e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#define list_for_each_prev_safe(pos, n, head) \
393e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	for (pos = (head)->prev, n = pos->prev; \
394e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	     prefetch(pos->prev), pos != (head); \
395e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	     pos = n, n = pos->prev)
396e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
397e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng/**
398e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * list_for_each_entry	-	iterate over list of given type
399e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * @pos:	the type * to use as a loop cursor.
400e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * @head:	the head for your list.
401e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * @member:	the name of the list_struct within the struct.
402e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng */
403e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#define list_for_each_entry(pos, head, member)				\
404e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	for (pos = list_entry((head)->next, typeof(*pos), member);	\
405e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	     prefetch(pos->member.next), &pos->member != (head); 	\
406e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	     pos = list_entry(pos->member.next, typeof(*pos), member))
407e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
408e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng/**
409e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * list_for_each_entry_reverse - iterate backwards over list of given type.
410e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * @pos:	the type * to use as a loop cursor.
411e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * @head:	the head for your list.
412e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * @member:	the name of the list_struct within the struct.
413e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng */
414e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#define list_for_each_entry_reverse(pos, head, member)			\
415e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	for (pos = list_entry((head)->prev, typeof(*pos), member);	\
416e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	     prefetch(pos->member.prev), &pos->member != (head); 	\
417e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	     pos = list_entry(pos->member.prev, typeof(*pos), member))
418e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
419e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng/**
420e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * list_prepare_entry - prepare a pos entry for use in list_for_each_entry_continue()
421e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * @pos:	the type * to use as a start point
422e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * @head:	the head of the list
423e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * @member:	the name of the list_struct within the struct.
424e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng *
425e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * Prepares a pos entry for use as a start point in list_for_each_entry_continue().
426e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng */
427e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#define list_prepare_entry(pos, head, member) \
428e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	((pos) ? : list_entry(head, typeof(*pos), member))
429e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
430e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng/**
431e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * list_for_each_entry_continue - continue iteration over list of given type
432e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * @pos:	the type * to use as a loop cursor.
433e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * @head:	the head for your list.
434e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * @member:	the name of the list_struct within the struct.
435e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng *
436e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * Continue to iterate over list of given type, continuing after
437e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * the current position.
438e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng */
439e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#define list_for_each_entry_continue(pos, head, member) 		\
440e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	for (pos = list_entry(pos->member.next, typeof(*pos), member);	\
441e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	     prefetch(pos->member.next), &pos->member != (head);	\
442e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	     pos = list_entry(pos->member.next, typeof(*pos), member))
443e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
444e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng/**
445e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * list_for_each_entry_continue_reverse - iterate backwards from the given point
446e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * @pos:	the type * to use as a loop cursor.
447e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * @head:	the head for your list.
448e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * @member:	the name of the list_struct within the struct.
449e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng *
450e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * Start to iterate over list of given type backwards, continuing after
451e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * the current position.
452e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng */
453e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#define list_for_each_entry_continue_reverse(pos, head, member)		\
454e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	for (pos = list_entry(pos->member.prev, typeof(*pos), member);	\
455e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	     prefetch(pos->member.prev), &pos->member != (head);	\
456e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	     pos = list_entry(pos->member.prev, typeof(*pos), member))
457e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
458e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng/**
459e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * list_for_each_entry_from - iterate over list of given type from the current point
460e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * @pos:	the type * to use as a loop cursor.
461e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * @head:	the head for your list.
462e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * @member:	the name of the list_struct within the struct.
463e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng *
464e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * Iterate over list of given type, continuing from current position.
465e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng */
466e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#define list_for_each_entry_from(pos, head, member) 			\
467e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	for (; prefetch(pos->member.next), &pos->member != (head);	\
468e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	     pos = list_entry(pos->member.next, typeof(*pos), member))
469e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
470e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng/**
471e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * list_for_each_entry_safe - iterate over list of given type safe against removal of list entry
472e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * @pos:	the type * to use as a loop cursor.
473e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * @n:		another type * to use as temporary storage
474e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * @head:	the head for your list.
475e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * @member:	the name of the list_struct within the struct.
476e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng */
477e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#define list_for_each_entry_safe(pos, n, head, member)			\
478e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	for (pos = list_entry((head)->next, typeof(*pos), member),	\
479e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng		n = list_entry(pos->member.next, typeof(*pos), member);	\
480e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	     &pos->member != (head); 					\
481e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	     pos = n, n = list_entry(n->member.next, typeof(*n), member))
482e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
483e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng/**
484e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * list_for_each_entry_safe_continue - continue list iteration safe against removal
485e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * @pos:	the type * to use as a loop cursor.
486e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * @n:		another type * to use as temporary storage
487e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * @head:	the head for your list.
488e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * @member:	the name of the list_struct within the struct.
489e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng *
490e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * Iterate over list of given type, continuing after current point,
491e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * safe against removal of list entry.
492e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng */
493e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#define list_for_each_entry_safe_continue(pos, n, head, member) 		\
494e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	for (pos = list_entry(pos->member.next, typeof(*pos), member), 		\
495e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng		n = list_entry(pos->member.next, typeof(*pos), member);		\
496e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	     &pos->member != (head);						\
497e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	     pos = n, n = list_entry(n->member.next, typeof(*n), member))
498e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
499e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng/**
500e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * list_for_each_entry_safe_from - iterate over list from current point safe against removal
501e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * @pos:	the type * to use as a loop cursor.
502e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * @n:		another type * to use as temporary storage
503e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * @head:	the head for your list.
504e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * @member:	the name of the list_struct within the struct.
505e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng *
506e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * Iterate over list of given type from current point, safe against
507e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * removal of list entry.
508e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng */
509e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#define list_for_each_entry_safe_from(pos, n, head, member) 			\
510e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	for (n = list_entry(pos->member.next, typeof(*pos), member);		\
511e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	     &pos->member != (head);						\
512e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	     pos = n, n = list_entry(n->member.next, typeof(*n), member))
513e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
514e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng/**
515e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * list_for_each_entry_safe_reverse - iterate backwards over list safe against removal
516e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * @pos:	the type * to use as a loop cursor.
517e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * @n:		another type * to use as temporary storage
518e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * @head:	the head for your list.
519e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * @member:	the name of the list_struct within the struct.
520e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng *
521e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * Iterate backwards over list of given type, safe against removal
522e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * of list entry.
523e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng */
524e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#define list_for_each_entry_safe_reverse(pos, n, head, member)		\
525e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	for (pos = list_entry((head)->prev, typeof(*pos), member),	\
526e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng		n = list_entry(pos->member.prev, typeof(*pos), member);	\
527e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	     &pos->member != (head); 					\
528e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	     pos = n, n = list_entry(n->member.prev, typeof(*n), member))
529e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
530e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng/**
531e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * list_safe_reset_next - reset a stale list_for_each_entry_safe loop
532e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * @pos:	the loop cursor used in the list_for_each_entry_safe loop
533e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * @n:		temporary storage used in list_for_each_entry_safe
534e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * @member:	the name of the list_struct within the struct.
535e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng *
536e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * list_safe_reset_next is not safe to use in general if the list may be
537e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * modified concurrently (eg. the lock is dropped in the loop body). An
538e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * exception to this is if the cursor element (pos) is pinned in the list,
539e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * and list_safe_reset_next is called after re-taking the lock and before
540e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * completing the current iteration of the loop body.
541e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng */
542e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#define list_safe_reset_next(pos, n, member)				\
543e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	n = list_entry(pos->member.next, typeof(*pos), member)
544e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
545e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#define HLIST_HEAD_INIT { .first = NULL }
546e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#define HLIST_HEAD(name) struct hlist_head name = {  .first = NULL }
547e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#define INIT_HLIST_HEAD(ptr) ((ptr)->first = NULL)
548e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengstatic inline void INIT_HLIST_NODE(struct hlist_node *h)
549e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng{
550e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	h->next = NULL;
551e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	h->pprev = NULL;
552e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng}
553e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
554e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengstatic inline int hlist_unhashed(const struct hlist_node *h)
555e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng{
556e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	return !h->pprev;
557e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng}
558e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
559e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengstatic inline int hlist_empty(const struct hlist_head *h)
560e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng{
561e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	return !h->first;
562e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng}
563e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
564e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengstatic inline void __hlist_del(struct hlist_node *n)
565e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng{
566e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	struct hlist_node *next = n->next;
567e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	struct hlist_node **pprev = n->pprev;
568e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	*pprev = next;
569e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	if (next)
570e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng		next->pprev = pprev;
571e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng}
572e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
573e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengstatic inline void hlist_del(struct hlist_node *n)
574e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng{
575e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	__hlist_del(n);
576e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	n->next = LIST_POISON1;
577e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	n->pprev = LIST_POISON2;
578e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng}
579e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
580e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengstatic inline void hlist_del_init(struct hlist_node *n)
581e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng{
582e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	if (!hlist_unhashed(n)) {
583e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng		__hlist_del(n);
584e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng		INIT_HLIST_NODE(n);
585e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	}
586e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng}
587e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
588e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengstatic inline void hlist_add_head(struct hlist_node *n, struct hlist_head *h)
589e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng{
590e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	struct hlist_node *first = h->first;
591e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	n->next = first;
592e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	if (first)
593e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng		first->pprev = &n->next;
594e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	h->first = n;
595e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	n->pprev = &h->first;
596e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng}
597e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
598e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng/* next must be != NULL */
599e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengstatic inline void hlist_add_before(struct hlist_node *n,
600e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng					struct hlist_node *next)
601e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng{
602e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	n->pprev = next->pprev;
603e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	n->next = next;
604e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	next->pprev = &n->next;
605e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	*(n->pprev) = n;
606e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng}
607e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
608e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengstatic inline void hlist_add_after(struct hlist_node *n,
609e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng					struct hlist_node *next)
610e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng{
611e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	next->next = n->next;
612e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	n->next = next;
613e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	next->pprev = &n->next;
614e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
615e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	if(next->next)
616e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng		next->next->pprev  = &next->next;
617e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng}
618e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
619e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng/*
620e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * Move a list from one list head to another. Fixup the pprev
621e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * reference of the first entry if it exists.
622e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng */
623e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengstatic inline void hlist_move_list(struct hlist_head *old,
624e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng				   struct hlist_head *new)
625e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng{
626e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	new->first = old->first;
627e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	if (new->first)
628e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng		new->first->pprev = &new->first;
629e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	old->first = NULL;
630e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng}
631e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
632e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#define hlist_entry(ptr, type, member) container_of(ptr,type,member)
633e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
634e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#define hlist_for_each(pos, head) \
635e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	for (pos = (head)->first; pos && ({ prefetch(pos->next); 1; }); \
636e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	     pos = pos->next)
637e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
638e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#define hlist_for_each_safe(pos, n, head) \
639e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	for (pos = (head)->first; pos && ({ n = pos->next; 1; }); \
640e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	     pos = n)
641e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
642e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng/**
643e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * hlist_for_each_entry	- iterate over list of given type
644e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * @tpos:	the type * to use as a loop cursor.
645e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * @pos:	the &struct hlist_node to use as a loop cursor.
646e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * @head:	the head for your list.
647e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * @member:	the name of the hlist_node within the struct.
648e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng */
649e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#define hlist_for_each_entry(tpos, pos, head, member)			 \
650e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	for (pos = (head)->first;					 \
651e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	     pos && ({ prefetch(pos->next); 1;}) &&			 \
652e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng		({ tpos = hlist_entry(pos, typeof(*tpos), member); 1;}); \
653e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	     pos = pos->next)
654e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
655e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng/**
656e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * hlist_for_each_entry_continue - iterate over a hlist continuing after current point
657e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * @tpos:	the type * to use as a loop cursor.
658e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * @pos:	the &struct hlist_node to use as a loop cursor.
659e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * @member:	the name of the hlist_node within the struct.
660e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng */
661e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#define hlist_for_each_entry_continue(tpos, pos, member)		 \
662e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	for (pos = (pos)->next;						 \
663e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	     pos && ({ prefetch(pos->next); 1;}) &&			 \
664e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng		({ tpos = hlist_entry(pos, typeof(*tpos), member); 1;}); \
665e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	     pos = pos->next)
666e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
667e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng/**
668e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * hlist_for_each_entry_from - iterate over a hlist continuing from current point
669e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * @tpos:	the type * to use as a loop cursor.
670e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * @pos:	the &struct hlist_node to use as a loop cursor.
671e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * @member:	the name of the hlist_node within the struct.
672e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng */
673e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#define hlist_for_each_entry_from(tpos, pos, member)			 \
674e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	for (; pos && ({ prefetch(pos->next); 1;}) &&			 \
675e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng		({ tpos = hlist_entry(pos, typeof(*tpos), member); 1;}); \
676e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	     pos = pos->next)
677e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
678e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng/**
679e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * hlist_for_each_entry_safe - iterate over list of given type safe against removal of list entry
680e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * @tpos:	the type * to use as a loop cursor.
681e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * @pos:	the &struct hlist_node to use as a loop cursor.
682e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * @n:		another &struct hlist_node to use as temporary storage
683e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * @head:	the head for your list.
684e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * @member:	the name of the hlist_node within the struct.
685e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng */
686e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#define hlist_for_each_entry_safe(tpos, pos, n, head, member) 		 \
687e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	for (pos = (head)->first;					 \
688e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	     pos && ({ n = pos->next; 1; }) && 				 \
689e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng		({ tpos = hlist_entry(pos, typeof(*tpos), member); 1;}); \
690e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	     pos = n)
691e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
692e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#endif
693