blob: 61f5aaf96192cdc4c1644741a415590b63c3c201 [file] [log] [blame]
Greg Kroah-Hartmanb2441312017-11-01 15:07:57 +01001/* SPDX-License-Identifier: GPL-2.0 */
Linus Torvalds1da177e2005-04-16 15:20:36 -07002#ifndef _LINUX_LIST_H
3#define _LINUX_LIST_H
4
Chris Metcalfde5d9bf2010-07-02 13:41:14 -04005#include <linux/types.h>
Linus Torvalds1da177e2005-04-16 15:20:36 -07006#include <linux/stddef.h>
Randy Dunlapc9cf5522006-06-27 02:53:52 -07007#include <linux/poison.h>
Linus Torvaldse66eed62011-05-19 14:15:29 -07008#include <linux/const.h>
Masahiro Yamada8b21d9c2014-10-13 15:51:30 -07009#include <linux/kernel.h>
Linus Torvalds1da177e2005-04-16 15:20:36 -070010
11/*
Linus Torvalds1da177e2005-04-16 15:20:36 -070012 * Simple doubly linked list implementation.
13 *
14 * Some of the internal functions ("__xxx") are useful when
15 * manipulating whole lists rather than single entries, as
16 * sometimes we already know the next/prev entries and we can
17 * generate better code by using them directly rather than
18 * using the generic single-entry routines.
19 */
20
Linus Torvalds1da177e2005-04-16 15:20:36 -070021#define LIST_HEAD_INIT(name) { &(name), &(name) }
22
23#define LIST_HEAD(name) \
24 struct list_head name = LIST_HEAD_INIT(name)
25
Zach Brown490d6ab2006-02-03 03:03:56 -080026static inline void INIT_LIST_HEAD(struct list_head *list)
27{
Paul E. McKenney2f073842015-10-12 16:56:42 -070028 WRITE_ONCE(list->next, list);
Zach Brown490d6ab2006-02-03 03:03:56 -080029 list->prev = list;
30}
Linus Torvalds1da177e2005-04-16 15:20:36 -070031
Kees Cookd7c81672016-08-17 14:42:08 -070032#ifdef CONFIG_DEBUG_LIST
33extern bool __list_add_valid(struct list_head *new,
34 struct list_head *prev,
35 struct list_head *next);
Kees Cook0cd340d2016-08-17 14:42:10 -070036extern bool __list_del_entry_valid(struct list_head *entry);
Kees Cookd7c81672016-08-17 14:42:08 -070037#else
38static inline bool __list_add_valid(struct list_head *new,
39 struct list_head *prev,
40 struct list_head *next)
41{
42 return true;
43}
Kees Cook0cd340d2016-08-17 14:42:10 -070044static inline bool __list_del_entry_valid(struct list_head *entry)
45{
46 return true;
47}
Kees Cookd7c81672016-08-17 14:42:08 -070048#endif
49
Linus Torvalds1da177e2005-04-16 15:20:36 -070050/*
51 * Insert a new entry between two known consecutive entries.
52 *
53 * This is only for internal list manipulation where we know
54 * the prev/next entries already!
55 */
56static inline void __list_add(struct list_head *new,
57 struct list_head *prev,
58 struct list_head *next)
59{
Kees Cookd7c81672016-08-17 14:42:08 -070060 if (!__list_add_valid(new, prev, next))
61 return;
62
Linus Torvalds1da177e2005-04-16 15:20:36 -070063 next->prev = new;
64 new->next = next;
65 new->prev = prev;
Paul E. McKenney1c97be62015-09-20 22:02:17 -070066 WRITE_ONCE(prev->next, new);
Linus Torvalds1da177e2005-04-16 15:20:36 -070067}
68
69/**
70 * list_add - add a new entry
71 * @new: new entry to be added
72 * @head: list head to add it after
73 *
74 * Insert a new entry after the specified head.
75 * This is good for implementing stacks.
76 */
77static inline void list_add(struct list_head *new, struct list_head *head)
78{
79 __list_add(new, head, head->next);
80}
Dave Jones199a9af2006-09-29 01:59:00 -070081
Linus Torvalds1da177e2005-04-16 15:20:36 -070082
83/**
84 * list_add_tail - add a new entry
85 * @new: new entry to be added
86 * @head: list head to add it before
87 *
88 * Insert a new entry before the specified head.
89 * This is useful for implementing queues.
90 */
91static inline void list_add_tail(struct list_head *new, struct list_head *head)
92{
93 __list_add(new, head->prev, head);
94}
95
96/*
Linus Torvalds1da177e2005-04-16 15:20:36 -070097 * Delete a list entry by making the prev/next entries
98 * point to each other.
99 *
100 * This is only for internal list manipulation where we know
101 * the prev/next entries already!
102 */
103static inline void __list_del(struct list_head * prev, struct list_head * next)
104{
105 next->prev = prev;
Paul E. McKenney7f5f8732015-09-18 08:45:22 -0700106 WRITE_ONCE(prev->next, next);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700107}
108
Toke Høiland-Jørgensenc8af5cd2019-06-28 11:12:34 +0200109/*
110 * Delete a list entry and clear the 'prev' pointer.
111 *
112 * This is a special-purpose list clearing method used in the networking code
113 * for lists allocated as per-cpu, where we don't want to incur the extra
114 * WRITE_ONCE() overhead of a regular list_del_init(). The code that uses this
115 * needs to check the node 'prev' pointer instead of calling list_empty().
116 */
117static inline void __list_del_clearprev(struct list_head *entry)
118{
119 __list_del(entry->prev, entry->next);
120 entry->prev = NULL;
121}
122
Linus Torvalds1da177e2005-04-16 15:20:36 -0700123/**
124 * list_del - deletes entry from list.
125 * @entry: the element to delete from the list.
Robert P. J. Day72fd4a32007-02-10 01:45:59 -0800126 * Note: list_empty() on entry does not return true after this, the entry is
Linus Torvalds1da177e2005-04-16 15:20:36 -0700127 * in an undefined state.
128 */
Linus Torvalds3c18d4d2011-02-18 11:32:28 -0800129static inline void __list_del_entry(struct list_head *entry)
130{
Kees Cook0cd340d2016-08-17 14:42:10 -0700131 if (!__list_del_entry_valid(entry))
132 return;
133
Linus Torvalds3c18d4d2011-02-18 11:32:28 -0800134 __list_del(entry->prev, entry->next);
135}
136
Linus Torvalds1da177e2005-04-16 15:20:36 -0700137static inline void list_del(struct list_head *entry)
138{
Kees Cook0cd340d2016-08-17 14:42:10 -0700139 __list_del_entry(entry);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700140 entry->next = LIST_POISON1;
141 entry->prev = LIST_POISON2;
142}
143
144/**
Oleg Nesterov54e73772006-06-23 02:05:54 -0700145 * list_replace - replace old entry by new one
146 * @old : the element to be replaced
147 * @new : the new element to insert
Robert P. J. Day72fd4a32007-02-10 01:45:59 -0800148 *
149 * If @old was empty, it will be overwritten.
Oleg Nesterov54e73772006-06-23 02:05:54 -0700150 */
151static inline void list_replace(struct list_head *old,
152 struct list_head *new)
153{
154 new->next = old->next;
155 new->next->prev = new;
156 new->prev = old->prev;
157 new->prev->next = new;
158}
159
160static inline void list_replace_init(struct list_head *old,
161 struct list_head *new)
162{
163 list_replace(old, new);
164 INIT_LIST_HEAD(old);
165}
166
Robert P. J. Day45f8bde2007-01-26 00:57:09 -0800167/**
Dan Williamse900a912019-05-14 15:41:28 -0700168 * list_swap - replace entry1 with entry2 and re-add entry1 at entry2's position
169 * @entry1: the location to place entry2
170 * @entry2: the location to place entry1
171 */
172static inline void list_swap(struct list_head *entry1,
173 struct list_head *entry2)
174{
175 struct list_head *pos = entry2->prev;
176
177 list_del(entry2);
178 list_replace(entry1, entry2);
179 if (pos == entry1)
180 pos = entry2;
181 list_add(entry1, pos);
182}
183
184/**
Linus Torvalds1da177e2005-04-16 15:20:36 -0700185 * list_del_init - deletes entry from list and reinitialize it.
186 * @entry: the element to delete from the list.
187 */
188static inline void list_del_init(struct list_head *entry)
189{
Linus Torvalds3c18d4d2011-02-18 11:32:28 -0800190 __list_del_entry(entry);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700191 INIT_LIST_HEAD(entry);
192}
193
194/**
195 * list_move - delete from one list and add as another's head
196 * @list: the entry to move
197 * @head: the head that will precede our entry
198 */
199static inline void list_move(struct list_head *list, struct list_head *head)
200{
Linus Torvalds3c18d4d2011-02-18 11:32:28 -0800201 __list_del_entry(list);
Daniel Walker78db2ad2007-05-12 16:28:35 -0700202 list_add(list, head);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700203}
204
205/**
206 * list_move_tail - delete from one list and add as another's tail
207 * @list: the entry to move
208 * @head: the head that will follow our entry
209 */
210static inline void list_move_tail(struct list_head *list,
211 struct list_head *head)
212{
Linus Torvalds3c18d4d2011-02-18 11:32:28 -0800213 __list_del_entry(list);
Daniel Walker78db2ad2007-05-12 16:28:35 -0700214 list_add_tail(list, head);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700215}
216
217/**
Christian Königdf2fc432018-09-13 11:17:23 +0200218 * list_bulk_move_tail - move a subsection of a list to its tail
219 * @head: the head that will follow our entry
220 * @first: first entry to move
221 * @last: last entry to move, can be the same as first
222 *
223 * Move all entries between @first and including @last before @head.
224 * All three entries must belong to the same linked list.
225 */
226static inline void list_bulk_move_tail(struct list_head *head,
227 struct list_head *first,
228 struct list_head *last)
229{
230 first->prev->next = last->next;
231 last->next->prev = first->prev;
232
233 head->prev->next = first;
234 first->prev = head->prev;
235
236 last->next = head;
237 head->prev = last;
238}
239
240/**
Randy Dunlapb7365232019-03-28 20:44:05 -0700241 * list_is_first -- tests whether @list is the first entry in list @head
Mel Gorman70b44592019-03-05 15:44:54 -0800242 * @list: the entry to test
243 * @head: the head of the list
244 */
245static inline int list_is_first(const struct list_head *list,
246 const struct list_head *head)
247{
248 return list->prev == head;
249}
250
251/**
Shailabh Nagare8f4d972006-07-14 00:24:35 -0700252 * list_is_last - tests whether @list is the last entry in list @head
253 * @list: the entry to test
254 * @head: the head of the list
255 */
256static inline int list_is_last(const struct list_head *list,
257 const struct list_head *head)
258{
259 return list->next == head;
260}
261
262/**
Linus Torvalds1da177e2005-04-16 15:20:36 -0700263 * list_empty - tests whether a list is empty
264 * @head: the list to test.
265 */
266static inline int list_empty(const struct list_head *head)
267{
Paul E. McKenney1658d352015-09-20 17:03:16 -0700268 return READ_ONCE(head->next) == head;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700269}
270
271/**
Randy Dunlapfe96e572006-06-25 05:47:42 -0700272 * list_empty_careful - tests whether a list is empty and not being modified
273 * @head: the list to test
274 *
275 * Description:
276 * tests whether a list is empty _and_ checks that no other CPU might be
277 * in the process of modifying either member (next or prev)
Linus Torvalds1da177e2005-04-16 15:20:36 -0700278 *
279 * NOTE: using list_empty_careful() without synchronization
280 * can only be safe if the only activity that can happen
281 * to the list entry is list_del_init(). Eg. it cannot be used
282 * if another CPU could re-list_add() it.
Linus Torvalds1da177e2005-04-16 15:20:36 -0700283 */
284static inline int list_empty_careful(const struct list_head *head)
285{
286 struct list_head *next = head->next;
287 return (next == head) && (next == head->prev);
288}
289
Masami Hiramatsu99602572008-04-28 02:14:27 -0700290/**
Frederic Weisbecker5908cdc2010-01-09 20:53:14 +0100291 * list_rotate_left - rotate the list to the left
292 * @head: the head of the list
293 */
294static inline void list_rotate_left(struct list_head *head)
295{
296 struct list_head *first;
297
298 if (!list_empty(head)) {
299 first = head->next;
300 list_move_tail(first, head);
301 }
302}
303
304/**
Tobin C. Hardinga16b5382019-05-13 17:15:59 -0700305 * list_rotate_to_front() - Rotate list to specific item.
306 * @list: The desired new front of the list.
307 * @head: The head of the list.
308 *
309 * Rotates list so that @list becomes the new front of the list.
310 */
311static inline void list_rotate_to_front(struct list_head *list,
312 struct list_head *head)
313{
314 /*
315 * Deletes the list head from the list denoted by @head and
316 * places it as the tail of @list, this effectively rotates the
317 * list so that @list is at the front.
318 */
319 list_move_tail(head, list);
320}
321
322/**
Masami Hiramatsu99602572008-04-28 02:14:27 -0700323 * list_is_singular - tests whether a list has just one entry.
324 * @head: the list to test.
325 */
326static inline int list_is_singular(const struct list_head *head)
327{
328 return !list_empty(head) && (head->next == head->prev);
329}
330
Luis R. Rodriguez00e8a4d2008-08-06 13:28:54 -0700331static inline void __list_cut_position(struct list_head *list,
332 struct list_head *head, struct list_head *entry)
333{
334 struct list_head *new_first = entry->next;
335 list->next = head->next;
336 list->next->prev = list;
337 list->prev = entry;
338 entry->next = list;
339 head->next = new_first;
340 new_first->prev = head;
341}
342
343/**
344 * list_cut_position - cut a list into two
345 * @list: a new list to add all removed entries
346 * @head: a list with entries
347 * @entry: an entry within head, could be the head itself
348 * and if so we won't cut the list
349 *
350 * This helper moves the initial part of @head, up to and
351 * including @entry, from @head to @list. You should
352 * pass on @entry an element you know is on @head. @list
353 * should be an empty list or a list you do not care about
354 * losing its data.
355 *
356 */
357static inline void list_cut_position(struct list_head *list,
358 struct list_head *head, struct list_head *entry)
359{
360 if (list_empty(head))
361 return;
362 if (list_is_singular(head) &&
363 (head->next != entry && head != entry))
364 return;
365 if (entry == head)
366 INIT_LIST_HEAD(list);
367 else
368 __list_cut_position(list, head, entry);
369}
370
Edward Cree4ce00172018-07-02 16:13:40 +0100371/**
372 * list_cut_before - cut a list into two, before given entry
373 * @list: a new list to add all removed entries
374 * @head: a list with entries
375 * @entry: an entry within head, could be the head itself
376 *
377 * This helper moves the initial part of @head, up to but
378 * excluding @entry, from @head to @list. You should pass
379 * in @entry an element you know is on @head. @list should
380 * be an empty list or a list you do not care about losing
381 * its data.
382 * If @entry == @head, all entries on @head are moved to
383 * @list.
384 */
385static inline void list_cut_before(struct list_head *list,
386 struct list_head *head,
387 struct list_head *entry)
388{
389 if (head->next == entry) {
390 INIT_LIST_HEAD(list);
391 return;
392 }
393 list->next = head->next;
394 list->next->prev = list;
395 list->prev = entry->prev;
396 list->prev->next = list;
397 head->next = entry;
398 entry->prev = head;
399}
400
Robert P. J. Day95d8c362008-04-29 00:59:29 -0700401static inline void __list_splice(const struct list_head *list,
Luis R. Rodriguez7d283ae2008-08-06 15:21:26 -0700402 struct list_head *prev,
403 struct list_head *next)
Linus Torvalds1da177e2005-04-16 15:20:36 -0700404{
405 struct list_head *first = list->next;
406 struct list_head *last = list->prev;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700407
Luis R. Rodriguez7d283ae2008-08-06 15:21:26 -0700408 first->prev = prev;
409 prev->next = first;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700410
Luis R. Rodriguez7d283ae2008-08-06 15:21:26 -0700411 last->next = next;
412 next->prev = last;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700413}
414
415/**
Luis R. Rodriguez7d283ae2008-08-06 15:21:26 -0700416 * list_splice - join two lists, this is designed for stacks
Linus Torvalds1da177e2005-04-16 15:20:36 -0700417 * @list: the new list to add.
418 * @head: the place to add it in the first list.
419 */
Robert P. J. Day95d8c362008-04-29 00:59:29 -0700420static inline void list_splice(const struct list_head *list,
421 struct list_head *head)
Linus Torvalds1da177e2005-04-16 15:20:36 -0700422{
423 if (!list_empty(list))
Luis R. Rodriguez7d283ae2008-08-06 15:21:26 -0700424 __list_splice(list, head, head->next);
425}
426
427/**
428 * list_splice_tail - join two lists, each list being a queue
429 * @list: the new list to add.
430 * @head: the place to add it in the first list.
431 */
432static inline void list_splice_tail(struct list_head *list,
433 struct list_head *head)
434{
435 if (!list_empty(list))
436 __list_splice(list, head->prev, head);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700437}
438
439/**
440 * list_splice_init - join two lists and reinitialise the emptied list.
441 * @list: the new list to add.
442 * @head: the place to add it in the first list.
443 *
444 * The list at @list is reinitialised
445 */
446static inline void list_splice_init(struct list_head *list,
447 struct list_head *head)
448{
449 if (!list_empty(list)) {
Luis R. Rodriguez7d283ae2008-08-06 15:21:26 -0700450 __list_splice(list, head, head->next);
451 INIT_LIST_HEAD(list);
452 }
453}
454
455/**
Randy Dunlap6724cce2008-08-08 13:56:20 -0700456 * list_splice_tail_init - join two lists and reinitialise the emptied list
Luis R. Rodriguez7d283ae2008-08-06 15:21:26 -0700457 * @list: the new list to add.
458 * @head: the place to add it in the first list.
459 *
Randy Dunlap6724cce2008-08-08 13:56:20 -0700460 * Each of the lists is a queue.
Luis R. Rodriguez7d283ae2008-08-06 15:21:26 -0700461 * The list at @list is reinitialised
462 */
463static inline void list_splice_tail_init(struct list_head *list,
464 struct list_head *head)
465{
466 if (!list_empty(list)) {
467 __list_splice(list, head->prev, head);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700468 INIT_LIST_HEAD(list);
469 }
470}
471
472/**
473 * list_entry - get the struct for this entry
474 * @ptr: the &struct list_head pointer.
475 * @type: the type of the struct this is embedded in.
Andrey Utkin3943f422014-11-14 05:09:55 +0400476 * @member: the name of the list_head within the struct.
Linus Torvalds1da177e2005-04-16 15:20:36 -0700477 */
478#define list_entry(ptr, type, member) \
479 container_of(ptr, type, member)
480
481/**
Pavel Emelianovb5e61812007-05-08 00:30:19 -0700482 * list_first_entry - get the first element from a list
483 * @ptr: the list head to take the element from.
484 * @type: the type of the struct this is embedded in.
Andrey Utkin3943f422014-11-14 05:09:55 +0400485 * @member: the name of the list_head within the struct.
Pavel Emelianovb5e61812007-05-08 00:30:19 -0700486 *
487 * Note, that list is expected to be not empty.
488 */
489#define list_first_entry(ptr, type, member) \
490 list_entry((ptr)->next, type, member)
491
492/**
Oleg Nesterov93be3c22013-11-12 15:10:03 -0800493 * list_last_entry - get the last element from a list
494 * @ptr: the list head to take the element from.
495 * @type: the type of the struct this is embedded in.
Andrey Utkin3943f422014-11-14 05:09:55 +0400496 * @member: the name of the list_head within the struct.
Oleg Nesterov93be3c22013-11-12 15:10:03 -0800497 *
498 * Note, that list is expected to be not empty.
499 */
500#define list_last_entry(ptr, type, member) \
501 list_entry((ptr)->prev, type, member)
502
503/**
Jiri Pirko6d7581e2013-05-29 05:02:56 +0000504 * list_first_entry_or_null - get the first element from a list
505 * @ptr: the list head to take the element from.
506 * @type: the type of the struct this is embedded in.
Andrey Utkin3943f422014-11-14 05:09:55 +0400507 * @member: the name of the list_head within the struct.
Jiri Pirko6d7581e2013-05-29 05:02:56 +0000508 *
509 * Note that if the list is empty, it returns NULL.
510 */
Chris Wilson12adfd82016-07-23 19:27:50 +0100511#define list_first_entry_or_null(ptr, type, member) ({ \
512 struct list_head *head__ = (ptr); \
513 struct list_head *pos__ = READ_ONCE(head__->next); \
514 pos__ != head__ ? list_entry(pos__, type, member) : NULL; \
515})
Jiri Pirko6d7581e2013-05-29 05:02:56 +0000516
517/**
Oleg Nesterov008208c2013-11-12 15:10:01 -0800518 * list_next_entry - get the next element in list
519 * @pos: the type * to cursor
Andrey Utkin3943f422014-11-14 05:09:55 +0400520 * @member: the name of the list_head within the struct.
Oleg Nesterov008208c2013-11-12 15:10:01 -0800521 */
522#define list_next_entry(pos, member) \
523 list_entry((pos)->member.next, typeof(*(pos)), member)
524
525/**
526 * list_prev_entry - get the prev element in list
527 * @pos: the type * to cursor
Andrey Utkin3943f422014-11-14 05:09:55 +0400528 * @member: the name of the list_head within the struct.
Oleg Nesterov008208c2013-11-12 15:10:01 -0800529 */
530#define list_prev_entry(pos, member) \
531 list_entry((pos)->member.prev, typeof(*(pos)), member)
532
533/**
Linus Torvalds1da177e2005-04-16 15:20:36 -0700534 * list_for_each - iterate over a list
Randy Dunlap8e3a67a2006-06-25 05:47:43 -0700535 * @pos: the &struct list_head to use as a loop cursor.
Linus Torvalds1da177e2005-04-16 15:20:36 -0700536 * @head: the head for your list.
537 */
538#define list_for_each(pos, head) \
Linus Torvaldse66eed62011-05-19 14:15:29 -0700539 for (pos = (head)->next; pos != (head); pos = pos->next)
Linus Torvalds1da177e2005-04-16 15:20:36 -0700540
541/**
Linus Torvalds1da177e2005-04-16 15:20:36 -0700542 * list_for_each_prev - iterate over a list backwards
Randy Dunlap8e3a67a2006-06-25 05:47:43 -0700543 * @pos: the &struct list_head to use as a loop cursor.
Linus Torvalds1da177e2005-04-16 15:20:36 -0700544 * @head: the head for your list.
545 */
546#define list_for_each_prev(pos, head) \
Linus Torvaldse66eed62011-05-19 14:15:29 -0700547 for (pos = (head)->prev; pos != (head); pos = pos->prev)
Linus Torvalds1da177e2005-04-16 15:20:36 -0700548
549/**
Randy Dunlapfe96e572006-06-25 05:47:42 -0700550 * list_for_each_safe - iterate over a list safe against removal of list entry
Randy Dunlap8e3a67a2006-06-25 05:47:43 -0700551 * @pos: the &struct list_head to use as a loop cursor.
Linus Torvalds1da177e2005-04-16 15:20:36 -0700552 * @n: another &struct list_head to use as temporary storage
553 * @head: the head for your list.
554 */
555#define list_for_each_safe(pos, n, head) \
556 for (pos = (head)->next, n = pos->next; pos != (head); \
557 pos = n, n = pos->next)
558
559/**
Randy Dunlap8f731f72007-10-18 23:39:28 -0700560 * list_for_each_prev_safe - iterate over a list backwards safe against removal of list entry
Denis V. Lunev37c42522007-10-16 23:29:53 -0700561 * @pos: the &struct list_head to use as a loop cursor.
562 * @n: another &struct list_head to use as temporary storage
563 * @head: the head for your list.
564 */
565#define list_for_each_prev_safe(pos, n, head) \
566 for (pos = (head)->prev, n = pos->prev; \
Linus Torvaldse66eed62011-05-19 14:15:29 -0700567 pos != (head); \
Denis V. Lunev37c42522007-10-16 23:29:53 -0700568 pos = n, n = pos->prev)
569
570/**
Linus Torvalds1da177e2005-04-16 15:20:36 -0700571 * list_for_each_entry - iterate over list of given type
Randy Dunlap8e3a67a2006-06-25 05:47:43 -0700572 * @pos: the type * to use as a loop cursor.
Linus Torvalds1da177e2005-04-16 15:20:36 -0700573 * @head: the head for your list.
Andrey Utkin3943f422014-11-14 05:09:55 +0400574 * @member: the name of the list_head within the struct.
Linus Torvalds1da177e2005-04-16 15:20:36 -0700575 */
576#define list_for_each_entry(pos, head, member) \
Oleg Nesterov93be3c22013-11-12 15:10:03 -0800577 for (pos = list_first_entry(head, typeof(*pos), member); \
Oleg Nesterov8120e2e2013-11-12 15:10:02 -0800578 &pos->member != (head); \
579 pos = list_next_entry(pos, member))
Linus Torvalds1da177e2005-04-16 15:20:36 -0700580
581/**
582 * list_for_each_entry_reverse - iterate backwards over list of given type.
Randy Dunlap8e3a67a2006-06-25 05:47:43 -0700583 * @pos: the type * to use as a loop cursor.
Linus Torvalds1da177e2005-04-16 15:20:36 -0700584 * @head: the head for your list.
Andrey Utkin3943f422014-11-14 05:09:55 +0400585 * @member: the name of the list_head within the struct.
Linus Torvalds1da177e2005-04-16 15:20:36 -0700586 */
587#define list_for_each_entry_reverse(pos, head, member) \
Oleg Nesterov93be3c22013-11-12 15:10:03 -0800588 for (pos = list_last_entry(head, typeof(*pos), member); \
Oleg Nesterov8120e2e2013-11-12 15:10:02 -0800589 &pos->member != (head); \
590 pos = list_prev_entry(pos, member))
Linus Torvalds1da177e2005-04-16 15:20:36 -0700591
592/**
Robert P. J. Day72fd4a32007-02-10 01:45:59 -0800593 * list_prepare_entry - prepare a pos entry for use in list_for_each_entry_continue()
Linus Torvalds1da177e2005-04-16 15:20:36 -0700594 * @pos: the type * to use as a start point
595 * @head: the head of the list
Andrey Utkin3943f422014-11-14 05:09:55 +0400596 * @member: the name of the list_head within the struct.
Randy Dunlapfe96e572006-06-25 05:47:42 -0700597 *
Robert P. J. Day72fd4a32007-02-10 01:45:59 -0800598 * Prepares a pos entry for use as a start point in list_for_each_entry_continue().
Linus Torvalds1da177e2005-04-16 15:20:36 -0700599 */
600#define list_prepare_entry(pos, head, member) \
601 ((pos) ? : list_entry(head, typeof(*pos), member))
602
603/**
Randy Dunlapfe96e572006-06-25 05:47:42 -0700604 * list_for_each_entry_continue - continue iteration over list of given type
Randy Dunlap8e3a67a2006-06-25 05:47:43 -0700605 * @pos: the type * to use as a loop cursor.
Linus Torvalds1da177e2005-04-16 15:20:36 -0700606 * @head: the head for your list.
Andrey Utkin3943f422014-11-14 05:09:55 +0400607 * @member: the name of the list_head within the struct.
Randy Dunlapfe96e572006-06-25 05:47:42 -0700608 *
609 * Continue to iterate over list of given type, continuing after
610 * the current position.
Linus Torvalds1da177e2005-04-16 15:20:36 -0700611 */
612#define list_for_each_entry_continue(pos, head, member) \
Oleg Nesterov8120e2e2013-11-12 15:10:02 -0800613 for (pos = list_next_entry(pos, member); \
614 &pos->member != (head); \
615 pos = list_next_entry(pos, member))
Linus Torvalds1da177e2005-04-16 15:20:36 -0700616
617/**
Pavel Emelyanov768f35912007-09-18 13:20:41 -0700618 * list_for_each_entry_continue_reverse - iterate backwards from the given point
619 * @pos: the type * to use as a loop cursor.
620 * @head: the head for your list.
Andrey Utkin3943f422014-11-14 05:09:55 +0400621 * @member: the name of the list_head within the struct.
Pavel Emelyanov768f35912007-09-18 13:20:41 -0700622 *
623 * Start to iterate over list of given type backwards, continuing after
624 * the current position.
625 */
626#define list_for_each_entry_continue_reverse(pos, head, member) \
Oleg Nesterov8120e2e2013-11-12 15:10:02 -0800627 for (pos = list_prev_entry(pos, member); \
628 &pos->member != (head); \
629 pos = list_prev_entry(pos, member))
Pavel Emelyanov768f35912007-09-18 13:20:41 -0700630
631/**
Randy Dunlapfe96e572006-06-25 05:47:42 -0700632 * list_for_each_entry_from - iterate over list of given type from the current point
Randy Dunlap8e3a67a2006-06-25 05:47:43 -0700633 * @pos: the type * to use as a loop cursor.
Arnaldo Carvalho de Meloe229c2f2006-03-20 17:19:17 -0800634 * @head: the head for your list.
Andrey Utkin3943f422014-11-14 05:09:55 +0400635 * @member: the name of the list_head within the struct.
Randy Dunlapfe96e572006-06-25 05:47:42 -0700636 *
637 * Iterate over list of given type, continuing from current position.
Arnaldo Carvalho de Meloe229c2f2006-03-20 17:19:17 -0800638 */
639#define list_for_each_entry_from(pos, head, member) \
Oleg Nesterov8120e2e2013-11-12 15:10:02 -0800640 for (; &pos->member != (head); \
641 pos = list_next_entry(pos, member))
Arnaldo Carvalho de Meloe229c2f2006-03-20 17:19:17 -0800642
643/**
Jiri Pirkob8628152017-02-03 10:29:05 +0100644 * list_for_each_entry_from_reverse - iterate backwards over list of given type
645 * from the current point
646 * @pos: the type * to use as a loop cursor.
647 * @head: the head for your list.
648 * @member: the name of the list_head within the struct.
649 *
650 * Iterate backwards over list of given type, continuing from current position.
651 */
652#define list_for_each_entry_from_reverse(pos, head, member) \
653 for (; &pos->member != (head); \
654 pos = list_prev_entry(pos, member))
655
656/**
Linus Torvalds1da177e2005-04-16 15:20:36 -0700657 * list_for_each_entry_safe - iterate over list of given type safe against removal of list entry
Randy Dunlap8e3a67a2006-06-25 05:47:43 -0700658 * @pos: the type * to use as a loop cursor.
Linus Torvalds1da177e2005-04-16 15:20:36 -0700659 * @n: another type * to use as temporary storage
660 * @head: the head for your list.
Andrey Utkin3943f422014-11-14 05:09:55 +0400661 * @member: the name of the list_head within the struct.
Linus Torvalds1da177e2005-04-16 15:20:36 -0700662 */
663#define list_for_each_entry_safe(pos, n, head, member) \
Oleg Nesterov93be3c22013-11-12 15:10:03 -0800664 for (pos = list_first_entry(head, typeof(*pos), member), \
Oleg Nesterov8120e2e2013-11-12 15:10:02 -0800665 n = list_next_entry(pos, member); \
Linus Torvalds1da177e2005-04-16 15:20:36 -0700666 &pos->member != (head); \
Oleg Nesterov8120e2e2013-11-12 15:10:02 -0800667 pos = n, n = list_next_entry(n, member))
Linus Torvalds1da177e2005-04-16 15:20:36 -0700668
669/**
Ben Hutchings9a86e2b2010-03-05 13:43:17 -0800670 * list_for_each_entry_safe_continue - continue list iteration safe against removal
Randy Dunlap8e3a67a2006-06-25 05:47:43 -0700671 * @pos: the type * to use as a loop cursor.
Arnaldo Carvalho de Melo74459dc2005-08-09 20:15:51 -0700672 * @n: another type * to use as temporary storage
673 * @head: the head for your list.
Andrey Utkin3943f422014-11-14 05:09:55 +0400674 * @member: the name of the list_head within the struct.
Randy Dunlapfe96e572006-06-25 05:47:42 -0700675 *
676 * Iterate over list of given type, continuing after current point,
677 * safe against removal of list entry.
Arnaldo Carvalho de Melo74459dc2005-08-09 20:15:51 -0700678 */
679#define list_for_each_entry_safe_continue(pos, n, head, member) \
Oleg Nesterov8120e2e2013-11-12 15:10:02 -0800680 for (pos = list_next_entry(pos, member), \
681 n = list_next_entry(pos, member); \
Arnaldo Carvalho de Melo74459dc2005-08-09 20:15:51 -0700682 &pos->member != (head); \
Oleg Nesterov8120e2e2013-11-12 15:10:02 -0800683 pos = n, n = list_next_entry(n, member))
Arnaldo Carvalho de Melo74459dc2005-08-09 20:15:51 -0700684
685/**
Ben Hutchings9a86e2b2010-03-05 13:43:17 -0800686 * list_for_each_entry_safe_from - iterate over list from current point safe against removal
Randy Dunlap8e3a67a2006-06-25 05:47:43 -0700687 * @pos: the type * to use as a loop cursor.
Arnaldo Carvalho de Melod8dcffe2006-03-20 17:18:05 -0800688 * @n: another type * to use as temporary storage
689 * @head: the head for your list.
Andrey Utkin3943f422014-11-14 05:09:55 +0400690 * @member: the name of the list_head within the struct.
Randy Dunlapfe96e572006-06-25 05:47:42 -0700691 *
692 * Iterate over list of given type from current point, safe against
693 * removal of list entry.
Arnaldo Carvalho de Melod8dcffe2006-03-20 17:18:05 -0800694 */
695#define list_for_each_entry_safe_from(pos, n, head, member) \
Oleg Nesterov8120e2e2013-11-12 15:10:02 -0800696 for (n = list_next_entry(pos, member); \
Arnaldo Carvalho de Melod8dcffe2006-03-20 17:18:05 -0800697 &pos->member != (head); \
Oleg Nesterov8120e2e2013-11-12 15:10:02 -0800698 pos = n, n = list_next_entry(n, member))
Arnaldo Carvalho de Melod8dcffe2006-03-20 17:18:05 -0800699
700/**
Ben Hutchings9a86e2b2010-03-05 13:43:17 -0800701 * list_for_each_entry_safe_reverse - iterate backwards over list safe against removal
Randy Dunlap8e3a67a2006-06-25 05:47:43 -0700702 * @pos: the type * to use as a loop cursor.
David Howells0ad42352006-01-09 20:51:31 -0800703 * @n: another type * to use as temporary storage
704 * @head: the head for your list.
Andrey Utkin3943f422014-11-14 05:09:55 +0400705 * @member: the name of the list_head within the struct.
Randy Dunlapfe96e572006-06-25 05:47:42 -0700706 *
707 * Iterate backwards over list of given type, safe against removal
708 * of list entry.
David Howells0ad42352006-01-09 20:51:31 -0800709 */
710#define list_for_each_entry_safe_reverse(pos, n, head, member) \
Oleg Nesterov93be3c22013-11-12 15:10:03 -0800711 for (pos = list_last_entry(head, typeof(*pos), member), \
Oleg Nesterov8120e2e2013-11-12 15:10:02 -0800712 n = list_prev_entry(pos, member); \
David Howells0ad42352006-01-09 20:51:31 -0800713 &pos->member != (head); \
Oleg Nesterov8120e2e2013-11-12 15:10:02 -0800714 pos = n, n = list_prev_entry(n, member))
David Howells0ad42352006-01-09 20:51:31 -0800715
npiggin@suse.de57439f82010-06-24 13:02:14 +1000716/**
717 * list_safe_reset_next - reset a stale list_for_each_entry_safe loop
718 * @pos: the loop cursor used in the list_for_each_entry_safe loop
719 * @n: temporary storage used in list_for_each_entry_safe
Andrey Utkin3943f422014-11-14 05:09:55 +0400720 * @member: the name of the list_head within the struct.
npiggin@suse.de57439f82010-06-24 13:02:14 +1000721 *
722 * list_safe_reset_next is not safe to use in general if the list may be
723 * modified concurrently (eg. the lock is dropped in the loop body). An
724 * exception to this is if the cursor element (pos) is pinned in the list,
725 * and list_safe_reset_next is called after re-taking the lock and before
726 * completing the current iteration of the loop body.
727 */
728#define list_safe_reset_next(pos, n, member) \
Oleg Nesterov8120e2e2013-11-12 15:10:02 -0800729 n = list_next_entry(pos, member)
npiggin@suse.de57439f82010-06-24 13:02:14 +1000730
Linus Torvalds1da177e2005-04-16 15:20:36 -0700731/*
732 * Double linked lists with a single pointer list head.
733 * Mostly useful for hash tables where the two pointer list head is
734 * too wasteful.
735 * You lose the ability to access the tail in O(1).
736 */
737
Linus Torvalds1da177e2005-04-16 15:20:36 -0700738#define HLIST_HEAD_INIT { .first = NULL }
739#define HLIST_HEAD(name) struct hlist_head name = { .first = NULL }
740#define INIT_HLIST_HEAD(ptr) ((ptr)->first = NULL)
Zach Brown490d6ab2006-02-03 03:03:56 -0800741static inline void INIT_HLIST_NODE(struct hlist_node *h)
742{
743 h->next = NULL;
744 h->pprev = NULL;
745}
Linus Torvalds1da177e2005-04-16 15:20:36 -0700746
747static inline int hlist_unhashed(const struct hlist_node *h)
748{
749 return !h->pprev;
750}
751
Eric Dumazetc54a2742019-11-07 11:37:37 -0800752/* This variant of hlist_unhashed() must be used in lockless contexts
753 * to avoid potential load-tearing.
754 * The READ_ONCE() is paired with the various WRITE_ONCE() in hlist
755 * helpers that are defined below.
756 */
757static inline int hlist_unhashed_lockless(const struct hlist_node *h)
758{
759 return !READ_ONCE(h->pprev);
760}
761
Linus Torvalds1da177e2005-04-16 15:20:36 -0700762static inline int hlist_empty(const struct hlist_head *h)
763{
Paul E. McKenney1658d352015-09-20 17:03:16 -0700764 return !READ_ONCE(h->first);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700765}
766
767static inline void __hlist_del(struct hlist_node *n)
768{
769 struct hlist_node *next = n->next;
770 struct hlist_node **pprev = n->pprev;
Paul E. McKenney7f5f8732015-09-18 08:45:22 -0700771
772 WRITE_ONCE(*pprev, next);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700773 if (next)
Eric Dumazetc54a2742019-11-07 11:37:37 -0800774 WRITE_ONCE(next->pprev, pprev);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700775}
776
777static inline void hlist_del(struct hlist_node *n)
778{
779 __hlist_del(n);
780 n->next = LIST_POISON1;
781 n->pprev = LIST_POISON2;
782}
783
Linus Torvalds1da177e2005-04-16 15:20:36 -0700784static inline void hlist_del_init(struct hlist_node *n)
785{
Akinobu Mitada753be2006-04-28 15:21:23 -0700786 if (!hlist_unhashed(n)) {
Linus Torvalds1da177e2005-04-16 15:20:36 -0700787 __hlist_del(n);
788 INIT_HLIST_NODE(n);
789 }
790}
791
792static inline void hlist_add_head(struct hlist_node *n, struct hlist_head *h)
793{
794 struct hlist_node *first = h->first;
Eric Dumazetc54a2742019-11-07 11:37:37 -0800795 WRITE_ONCE(n->next, first);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700796 if (first)
Eric Dumazetc54a2742019-11-07 11:37:37 -0800797 WRITE_ONCE(first->pprev, &n->next);
Paul E. McKenney1c97be62015-09-20 22:02:17 -0700798 WRITE_ONCE(h->first, n);
Eric Dumazetc54a2742019-11-07 11:37:37 -0800799 WRITE_ONCE(n->pprev, &h->first);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700800}
801
Linus Torvalds1da177e2005-04-16 15:20:36 -0700802/* next must be != NULL */
803static inline void hlist_add_before(struct hlist_node *n,
804 struct hlist_node *next)
805{
Eric Dumazetc54a2742019-11-07 11:37:37 -0800806 WRITE_ONCE(n->pprev, next->pprev);
807 WRITE_ONCE(n->next, next);
808 WRITE_ONCE(next->pprev, &n->next);
Paul E. McKenney1c97be62015-09-20 22:02:17 -0700809 WRITE_ONCE(*(n->pprev), n);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700810}
811
Ken Helias1d023282014-08-06 16:09:16 -0700812static inline void hlist_add_behind(struct hlist_node *n,
813 struct hlist_node *prev)
Linus Torvalds1da177e2005-04-16 15:20:36 -0700814{
Eric Dumazetc54a2742019-11-07 11:37:37 -0800815 WRITE_ONCE(n->next, prev->next);
816 WRITE_ONCE(prev->next, n);
817 WRITE_ONCE(n->pprev, &prev->next);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700818
Ken Heliasbc18dd32014-08-06 16:09:14 -0700819 if (n->next)
Eric Dumazetc54a2742019-11-07 11:37:37 -0800820 WRITE_ONCE(n->next->pprev, &n->next);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700821}
822
Al Viro756acc22010-10-23 15:23:40 -0400823/* after that we'll appear to be on some hlist and hlist_del will work */
824static inline void hlist_add_fake(struct hlist_node *n)
825{
826 n->pprev = &n->next;
827}
828
Josef Bacikcbedaac2015-03-12 08:19:11 -0400829static inline bool hlist_fake(struct hlist_node *h)
830{
831 return h->pprev == &h->next;
832}
833
Vegard Nossum673d62cc2008-08-31 23:39:21 +0200834/*
Thomas Gleixner15dba1e2016-07-04 09:50:27 +0000835 * Check whether the node is the only node of the head without
836 * accessing head:
837 */
838static inline bool
839hlist_is_singular_node(struct hlist_node *n, struct hlist_head *h)
840{
841 return !n->next && n->pprev == &h->first;
842}
843
844/*
Vegard Nossum673d62cc2008-08-31 23:39:21 +0200845 * Move a list from one list head to another. Fixup the pprev
846 * reference of the first entry if it exists.
847 */
848static inline void hlist_move_list(struct hlist_head *old,
849 struct hlist_head *new)
850{
851 new->first = old->first;
852 if (new->first)
853 new->first->pprev = &new->first;
854 old->first = NULL;
855}
856
Linus Torvalds1da177e2005-04-16 15:20:36 -0700857#define hlist_entry(ptr, type, member) container_of(ptr,type,member)
858
859#define hlist_for_each(pos, head) \
Linus Torvalds75d65a42011-05-19 13:50:07 -0700860 for (pos = (head)->first; pos ; pos = pos->next)
Linus Torvalds1da177e2005-04-16 15:20:36 -0700861
862#define hlist_for_each_safe(pos, n, head) \
863 for (pos = (head)->first; pos && ({ n = pos->next; 1; }); \
864 pos = n)
865
Sasha Levinb67bfe02013-02-27 17:06:00 -0800866#define hlist_entry_safe(ptr, type, member) \
Paul E. McKenneyf65846a2013-03-09 07:38:41 -0800867 ({ typeof(ptr) ____ptr = (ptr); \
868 ____ptr ? hlist_entry(____ptr, type, member) : NULL; \
869 })
Sasha Levinb67bfe02013-02-27 17:06:00 -0800870
Linus Torvalds1da177e2005-04-16 15:20:36 -0700871/**
872 * hlist_for_each_entry - iterate over list of given type
Sasha Levinb67bfe02013-02-27 17:06:00 -0800873 * @pos: the type * to use as a loop cursor.
Linus Torvalds1da177e2005-04-16 15:20:36 -0700874 * @head: the head for your list.
875 * @member: the name of the hlist_node within the struct.
876 */
Sasha Levinb67bfe02013-02-27 17:06:00 -0800877#define hlist_for_each_entry(pos, head, member) \
878 for (pos = hlist_entry_safe((head)->first, typeof(*(pos)), member);\
879 pos; \
880 pos = hlist_entry_safe((pos)->member.next, typeof(*(pos)), member))
Linus Torvalds1da177e2005-04-16 15:20:36 -0700881
882/**
Randy Dunlapfe96e572006-06-25 05:47:42 -0700883 * hlist_for_each_entry_continue - iterate over a hlist continuing after current point
Sasha Levinb67bfe02013-02-27 17:06:00 -0800884 * @pos: the type * to use as a loop cursor.
Linus Torvalds1da177e2005-04-16 15:20:36 -0700885 * @member: the name of the hlist_node within the struct.
886 */
Sasha Levinb67bfe02013-02-27 17:06:00 -0800887#define hlist_for_each_entry_continue(pos, member) \
888 for (pos = hlist_entry_safe((pos)->member.next, typeof(*(pos)), member);\
889 pos; \
890 pos = hlist_entry_safe((pos)->member.next, typeof(*(pos)), member))
Linus Torvalds1da177e2005-04-16 15:20:36 -0700891
892/**
Randy Dunlapfe96e572006-06-25 05:47:42 -0700893 * hlist_for_each_entry_from - iterate over a hlist continuing from current point
Sasha Levinb67bfe02013-02-27 17:06:00 -0800894 * @pos: the type * to use as a loop cursor.
Linus Torvalds1da177e2005-04-16 15:20:36 -0700895 * @member: the name of the hlist_node within the struct.
896 */
Sasha Levinb67bfe02013-02-27 17:06:00 -0800897#define hlist_for_each_entry_from(pos, member) \
898 for (; pos; \
899 pos = hlist_entry_safe((pos)->member.next, typeof(*(pos)), member))
Linus Torvalds1da177e2005-04-16 15:20:36 -0700900
901/**
902 * hlist_for_each_entry_safe - iterate over list of given type safe against removal of list entry
Sasha Levinb67bfe02013-02-27 17:06:00 -0800903 * @pos: the type * to use as a loop cursor.
Linus Torvalds1da177e2005-04-16 15:20:36 -0700904 * @n: another &struct hlist_node to use as temporary storage
905 * @head: the head for your list.
906 * @member: the name of the hlist_node within the struct.
907 */
Sasha Levinb67bfe02013-02-27 17:06:00 -0800908#define hlist_for_each_entry_safe(pos, n, head, member) \
909 for (pos = hlist_entry_safe((head)->first, typeof(*pos), member);\
910 pos && ({ n = pos->member.next; 1; }); \
911 pos = hlist_entry_safe(n, typeof(*pos), member))
Linus Torvalds1da177e2005-04-16 15:20:36 -0700912
Linus Torvalds1da177e2005-04-16 15:20:36 -0700913#endif