1 | /* SPDX-License-Identifier: GPL-2.0 */ |
2 | #ifndef _LINUX_LIST_H |
3 | #define _LINUX_LIST_H |
4 | |
5 | #include <linux/container_of.h> |
6 | #include <linux/types.h> |
7 | #include <linux/stddef.h> |
8 | #include <linux/poison.h> |
9 | #include <linux/const.h> |
10 | |
11 | #include <asm/barrier.h> |
12 | |
13 | /* |
14 | * Circular doubly linked list implementation. |
15 | * |
16 | * Some of the internal functions ("__xxx") are useful when |
17 | * manipulating whole lists rather than single entries, as |
18 | * sometimes we already know the next/prev entries and we can |
19 | * generate better code by using them directly rather than |
20 | * using the generic single-entry routines. |
21 | */ |
22 | |
23 | #define LIST_HEAD_INIT(name) { &(name), &(name) } |
24 | |
25 | #define LIST_HEAD(name) \ |
26 | struct list_head name = LIST_HEAD_INIT(name) |
27 | |
28 | /** |
29 | * INIT_LIST_HEAD - Initialize a list_head structure |
30 | * @list: list_head structure to be initialized. |
31 | * |
32 | * Initializes the list_head to point to itself. If it is a list header, |
33 | * the result is an empty list. |
34 | */ |
35 | static inline void INIT_LIST_HEAD(struct list_head *list) |
36 | { |
37 | WRITE_ONCE(list->next, list); |
38 | WRITE_ONCE(list->prev, list); |
39 | } |
40 | |
41 | #ifdef CONFIG_LIST_HARDENED |
42 | |
43 | #ifdef CONFIG_DEBUG_LIST |
44 | # define __list_valid_slowpath |
45 | #else |
46 | # define __list_valid_slowpath __cold __preserve_most |
47 | #endif |
48 | |
49 | /* |
50 | * Performs the full set of list corruption checks before __list_add(). |
51 | * On list corruption reports a warning, and returns false. |
52 | */ |
53 | extern bool __list_valid_slowpath __list_add_valid_or_report(struct list_head *new, |
54 | struct list_head *prev, |
55 | struct list_head *next); |
56 | |
57 | /* |
58 | * Performs list corruption checks before __list_add(). Returns false if a |
59 | * corruption is detected, true otherwise. |
60 | * |
61 | * With CONFIG_LIST_HARDENED only, performs minimal list integrity checking |
62 | * inline to catch non-faulting corruptions, and only if a corruption is |
63 | * detected calls the reporting function __list_add_valid_or_report(). |
64 | */ |
65 | static __always_inline bool __list_add_valid(struct list_head *new, |
66 | struct list_head *prev, |
67 | struct list_head *next) |
68 | { |
69 | bool ret = true; |
70 | |
71 | if (!IS_ENABLED(CONFIG_DEBUG_LIST)) { |
72 | /* |
73 | * With the hardening version, elide checking if next and prev |
74 | * are NULL, since the immediate dereference of them below would |
75 | * result in a fault if NULL. |
76 | * |
77 | * With the reduced set of checks, we can afford to inline the |
78 | * checks, which also gives the compiler a chance to elide some |
79 | * of them completely if they can be proven at compile-time. If |
80 | * one of the pre-conditions does not hold, the slow-path will |
81 | * show a report which pre-condition failed. |
82 | */ |
83 | if (likely(next->prev == prev && prev->next == next && new != prev && new != next)) |
84 | return true; |
85 | ret = false; |
86 | } |
87 | |
88 | ret &= __list_add_valid_or_report(new, prev, next); |
89 | return ret; |
90 | } |
91 | |
92 | /* |
93 | * Performs the full set of list corruption checks before __list_del_entry(). |
94 | * On list corruption reports a warning, and returns false. |
95 | */ |
96 | extern bool __list_valid_slowpath __list_del_entry_valid_or_report(struct list_head *entry); |
97 | |
98 | /* |
99 | * Performs list corruption checks before __list_del_entry(). Returns false if a |
100 | * corruption is detected, true otherwise. |
101 | * |
102 | * With CONFIG_LIST_HARDENED only, performs minimal list integrity checking |
103 | * inline to catch non-faulting corruptions, and only if a corruption is |
104 | * detected calls the reporting function __list_del_entry_valid_or_report(). |
105 | */ |
106 | static __always_inline bool __list_del_entry_valid(struct list_head *entry) |
107 | { |
108 | bool ret = true; |
109 | |
110 | if (!IS_ENABLED(CONFIG_DEBUG_LIST)) { |
111 | struct list_head *prev = entry->prev; |
112 | struct list_head *next = entry->next; |
113 | |
114 | /* |
115 | * With the hardening version, elide checking if next and prev |
116 | * are NULL, LIST_POISON1 or LIST_POISON2, since the immediate |
117 | * dereference of them below would result in a fault. |
118 | */ |
119 | if (likely(prev->next == entry && next->prev == entry)) |
120 | return true; |
121 | ret = false; |
122 | } |
123 | |
124 | ret &= __list_del_entry_valid_or_report(entry); |
125 | return ret; |
126 | } |
127 | #else |
128 | static inline bool __list_add_valid(struct list_head *new, |
129 | struct list_head *prev, |
130 | struct list_head *next) |
131 | { |
132 | return true; |
133 | } |
134 | static inline bool __list_del_entry_valid(struct list_head *entry) |
135 | { |
136 | return true; |
137 | } |
138 | #endif |
139 | |
140 | /* |
141 | * Insert a new entry between two known consecutive entries. |
142 | * |
143 | * This is only for internal list manipulation where we know |
144 | * the prev/next entries already! |
145 | */ |
146 | static inline void __list_add(struct list_head *new, |
147 | struct list_head *prev, |
148 | struct list_head *next) |
149 | { |
150 | if (!__list_add_valid(new, prev, next)) |
151 | return; |
152 | |
153 | next->prev = new; |
154 | new->next = next; |
155 | new->prev = prev; |
156 | WRITE_ONCE(prev->next, new); |
157 | } |
158 | |
159 | /** |
160 | * list_add - add a new entry |
161 | * @new: new entry to be added |
162 | * @head: list head to add it after |
163 | * |
164 | * Insert a new entry after the specified head. |
165 | * This is good for implementing stacks. |
166 | */ |
167 | static inline void list_add(struct list_head *new, struct list_head *head) |
168 | { |
169 | __list_add(new, prev: head, next: head->next); |
170 | } |
171 | |
172 | |
173 | /** |
174 | * list_add_tail - add a new entry |
175 | * @new: new entry to be added |
176 | * @head: list head to add it before |
177 | * |
178 | * Insert a new entry before the specified head. |
179 | * This is useful for implementing queues. |
180 | */ |
181 | static inline void list_add_tail(struct list_head *new, struct list_head *head) |
182 | { |
183 | __list_add(new, prev: head->prev, next: head); |
184 | } |
185 | |
186 | /* |
187 | * Delete a list entry by making the prev/next entries |
188 | * point to each other. |
189 | * |
190 | * This is only for internal list manipulation where we know |
191 | * the prev/next entries already! |
192 | */ |
193 | static inline void __list_del(struct list_head * prev, struct list_head * next) |
194 | { |
195 | next->prev = prev; |
196 | WRITE_ONCE(prev->next, next); |
197 | } |
198 | |
199 | /* |
200 | * Delete a list entry and clear the 'prev' pointer. |
201 | * |
202 | * This is a special-purpose list clearing method used in the networking code |
203 | * for lists allocated as per-cpu, where we don't want to incur the extra |
204 | * WRITE_ONCE() overhead of a regular list_del_init(). The code that uses this |
205 | * needs to check the node 'prev' pointer instead of calling list_empty(). |
206 | */ |
207 | static inline void __list_del_clearprev(struct list_head *entry) |
208 | { |
209 | __list_del(prev: entry->prev, next: entry->next); |
210 | entry->prev = NULL; |
211 | } |
212 | |
213 | static inline void __list_del_entry(struct list_head *entry) |
214 | { |
215 | if (!__list_del_entry_valid(entry)) |
216 | return; |
217 | |
218 | __list_del(prev: entry->prev, next: entry->next); |
219 | } |
220 | |
221 | /** |
222 | * list_del - deletes entry from list. |
223 | * @entry: the element to delete from the list. |
224 | * Note: list_empty() on entry does not return true after this, the entry is |
225 | * in an undefined state. |
226 | */ |
227 | static inline void list_del(struct list_head *entry) |
228 | { |
229 | __list_del_entry(entry); |
230 | entry->next = LIST_POISON1; |
231 | entry->prev = LIST_POISON2; |
232 | } |
233 | |
234 | /** |
235 | * list_replace - replace old entry by new one |
236 | * @old : the element to be replaced |
237 | * @new : the new element to insert |
238 | * |
239 | * If @old was empty, it will be overwritten. |
240 | */ |
241 | static inline void list_replace(struct list_head *old, |
242 | struct list_head *new) |
243 | { |
244 | new->next = old->next; |
245 | new->next->prev = new; |
246 | new->prev = old->prev; |
247 | new->prev->next = new; |
248 | } |
249 | |
250 | /** |
251 | * list_replace_init - replace old entry by new one and initialize the old one |
252 | * @old : the element to be replaced |
253 | * @new : the new element to insert |
254 | * |
255 | * If @old was empty, it will be overwritten. |
256 | */ |
257 | static inline void list_replace_init(struct list_head *old, |
258 | struct list_head *new) |
259 | { |
260 | list_replace(old, new); |
261 | INIT_LIST_HEAD(list: old); |
262 | } |
263 | |
264 | /** |
265 | * list_swap - replace entry1 with entry2 and re-add entry1 at entry2's position |
266 | * @entry1: the location to place entry2 |
267 | * @entry2: the location to place entry1 |
268 | */ |
269 | static inline void list_swap(struct list_head *entry1, |
270 | struct list_head *entry2) |
271 | { |
272 | struct list_head *pos = entry2->prev; |
273 | |
274 | list_del(entry: entry2); |
275 | list_replace(old: entry1, new: entry2); |
276 | if (pos == entry1) |
277 | pos = entry2; |
278 | list_add(new: entry1, head: pos); |
279 | } |
280 | |
281 | /** |
282 | * list_del_init - deletes entry from list and reinitialize it. |
283 | * @entry: the element to delete from the list. |
284 | */ |
285 | static inline void list_del_init(struct list_head *entry) |
286 | { |
287 | __list_del_entry(entry); |
288 | INIT_LIST_HEAD(list: entry); |
289 | } |
290 | |
291 | /** |
292 | * list_move - delete from one list and add as another's head |
293 | * @list: the entry to move |
294 | * @head: the head that will precede our entry |
295 | */ |
296 | static inline void list_move(struct list_head *list, struct list_head *head) |
297 | { |
298 | __list_del_entry(entry: list); |
299 | list_add(new: list, head); |
300 | } |
301 | |
302 | /** |
303 | * list_move_tail - delete from one list and add as another's tail |
304 | * @list: the entry to move |
305 | * @head: the head that will follow our entry |
306 | */ |
307 | static inline void list_move_tail(struct list_head *list, |
308 | struct list_head *head) |
309 | { |
310 | __list_del_entry(entry: list); |
311 | list_add_tail(new: list, head); |
312 | } |
313 | |
314 | /** |
315 | * list_bulk_move_tail - move a subsection of a list to its tail |
316 | * @head: the head that will follow our entry |
317 | * @first: first entry to move |
318 | * @last: last entry to move, can be the same as first |
319 | * |
320 | * Move all entries between @first and including @last before @head. |
321 | * All three entries must belong to the same linked list. |
322 | */ |
323 | static inline void list_bulk_move_tail(struct list_head *head, |
324 | struct list_head *first, |
325 | struct list_head *last) |
326 | { |
327 | first->prev->next = last->next; |
328 | last->next->prev = first->prev; |
329 | |
330 | head->prev->next = first; |
331 | first->prev = head->prev; |
332 | |
333 | last->next = head; |
334 | head->prev = last; |
335 | } |
336 | |
337 | /** |
338 | * list_is_first -- tests whether @list is the first entry in list @head |
339 | * @list: the entry to test |
340 | * @head: the head of the list |
341 | */ |
342 | static inline int list_is_first(const struct list_head *list, const struct list_head *head) |
343 | { |
344 | return list->prev == head; |
345 | } |
346 | |
347 | /** |
348 | * list_is_last - tests whether @list is the last entry in list @head |
349 | * @list: the entry to test |
350 | * @head: the head of the list |
351 | */ |
352 | static inline int list_is_last(const struct list_head *list, const struct list_head *head) |
353 | { |
354 | return list->next == head; |
355 | } |
356 | |
357 | /** |
358 | * list_is_head - tests whether @list is the list @head |
359 | * @list: the entry to test |
360 | * @head: the head of the list |
361 | */ |
362 | static inline int list_is_head(const struct list_head *list, const struct list_head *head) |
363 | { |
364 | return list == head; |
365 | } |
366 | |
367 | /** |
368 | * list_empty - tests whether a list is empty |
369 | * @head: the list to test. |
370 | */ |
371 | static inline int list_empty(const struct list_head *head) |
372 | { |
373 | return READ_ONCE(head->next) == head; |
374 | } |
375 | |
376 | /** |
377 | * list_del_init_careful - deletes entry from list and reinitialize it. |
378 | * @entry: the element to delete from the list. |
379 | * |
380 | * This is the same as list_del_init(), except designed to be used |
381 | * together with list_empty_careful() in a way to guarantee ordering |
382 | * of other memory operations. |
383 | * |
384 | * Any memory operations done before a list_del_init_careful() are |
385 | * guaranteed to be visible after a list_empty_careful() test. |
386 | */ |
387 | static inline void list_del_init_careful(struct list_head *entry) |
388 | { |
389 | __list_del_entry(entry); |
390 | WRITE_ONCE(entry->prev, entry); |
391 | smp_store_release(&entry->next, entry); |
392 | } |
393 | |
394 | /** |
395 | * list_empty_careful - tests whether a list is empty and not being modified |
396 | * @head: the list to test |
397 | * |
398 | * Description: |
399 | * tests whether a list is empty _and_ checks that no other CPU might be |
400 | * in the process of modifying either member (next or prev) |
401 | * |
402 | * NOTE: using list_empty_careful() without synchronization |
403 | * can only be safe if the only activity that can happen |
404 | * to the list entry is list_del_init(). Eg. it cannot be used |
405 | * if another CPU could re-list_add() it. |
406 | */ |
407 | static inline int list_empty_careful(const struct list_head *head) |
408 | { |
409 | struct list_head *next = smp_load_acquire(&head->next); |
410 | return list_is_head(list: next, head) && (next == READ_ONCE(head->prev)); |
411 | } |
412 | |
413 | /** |
414 | * list_rotate_left - rotate the list to the left |
415 | * @head: the head of the list |
416 | */ |
417 | static inline void list_rotate_left(struct list_head *head) |
418 | { |
419 | struct list_head *first; |
420 | |
421 | if (!list_empty(head)) { |
422 | first = head->next; |
423 | list_move_tail(list: first, head); |
424 | } |
425 | } |
426 | |
427 | /** |
428 | * list_rotate_to_front() - Rotate list to specific item. |
429 | * @list: The desired new front of the list. |
430 | * @head: The head of the list. |
431 | * |
432 | * Rotates list so that @list becomes the new front of the list. |
433 | */ |
434 | static inline void list_rotate_to_front(struct list_head *list, |
435 | struct list_head *head) |
436 | { |
437 | /* |
438 | * Deletes the list head from the list denoted by @head and |
439 | * places it as the tail of @list, this effectively rotates the |
440 | * list so that @list is at the front. |
441 | */ |
442 | list_move_tail(list: head, head: list); |
443 | } |
444 | |
445 | /** |
446 | * list_is_singular - tests whether a list has just one entry. |
447 | * @head: the list to test. |
448 | */ |
449 | static inline int list_is_singular(const struct list_head *head) |
450 | { |
451 | return !list_empty(head) && (head->next == head->prev); |
452 | } |
453 | |
454 | static inline void __list_cut_position(struct list_head *list, |
455 | struct list_head *head, struct list_head *entry) |
456 | { |
457 | struct list_head *new_first = entry->next; |
458 | list->next = head->next; |
459 | list->next->prev = list; |
460 | list->prev = entry; |
461 | entry->next = list; |
462 | head->next = new_first; |
463 | new_first->prev = head; |
464 | } |
465 | |
466 | /** |
467 | * list_cut_position - cut a list into two |
468 | * @list: a new list to add all removed entries |
469 | * @head: a list with entries |
470 | * @entry: an entry within head, could be the head itself |
471 | * and if so we won't cut the list |
472 | * |
473 | * This helper moves the initial part of @head, up to and |
474 | * including @entry, from @head to @list. You should |
475 | * pass on @entry an element you know is on @head. @list |
476 | * should be an empty list or a list you do not care about |
477 | * losing its data. |
478 | * |
479 | */ |
480 | static inline void list_cut_position(struct list_head *list, |
481 | struct list_head *head, struct list_head *entry) |
482 | { |
483 | if (list_empty(head)) |
484 | return; |
485 | if (list_is_singular(head) && !list_is_head(list: entry, head) && (entry != head->next)) |
486 | return; |
487 | if (list_is_head(list: entry, head)) |
488 | INIT_LIST_HEAD(list); |
489 | else |
490 | __list_cut_position(list, head, entry); |
491 | } |
492 | |
493 | /** |
494 | * list_cut_before - cut a list into two, before given entry |
495 | * @list: a new list to add all removed entries |
496 | * @head: a list with entries |
497 | * @entry: an entry within head, could be the head itself |
498 | * |
499 | * This helper moves the initial part of @head, up to but |
500 | * excluding @entry, from @head to @list. You should pass |
501 | * in @entry an element you know is on @head. @list should |
502 | * be an empty list or a list you do not care about losing |
503 | * its data. |
504 | * If @entry == @head, all entries on @head are moved to |
505 | * @list. |
506 | */ |
507 | static inline void list_cut_before(struct list_head *list, |
508 | struct list_head *head, |
509 | struct list_head *entry) |
510 | { |
511 | if (head->next == entry) { |
512 | INIT_LIST_HEAD(list); |
513 | return; |
514 | } |
515 | list->next = head->next; |
516 | list->next->prev = list; |
517 | list->prev = entry->prev; |
518 | list->prev->next = list; |
519 | head->next = entry; |
520 | entry->prev = head; |
521 | } |
522 | |
523 | static inline void __list_splice(const struct list_head *list, |
524 | struct list_head *prev, |
525 | struct list_head *next) |
526 | { |
527 | struct list_head *first = list->next; |
528 | struct list_head *last = list->prev; |
529 | |
530 | first->prev = prev; |
531 | prev->next = first; |
532 | |
533 | last->next = next; |
534 | next->prev = last; |
535 | } |
536 | |
537 | /** |
538 | * list_splice - join two lists, this is designed for stacks |
539 | * @list: the new list to add. |
540 | * @head: the place to add it in the first list. |
541 | */ |
542 | static inline void list_splice(const struct list_head *list, |
543 | struct list_head *head) |
544 | { |
545 | if (!list_empty(head: list)) |
546 | __list_splice(list, prev: head, next: head->next); |
547 | } |
548 | |
549 | /** |
550 | * list_splice_tail - join two lists, each list being a queue |
551 | * @list: the new list to add. |
552 | * @head: the place to add it in the first list. |
553 | */ |
554 | static inline void list_splice_tail(struct list_head *list, |
555 | struct list_head *head) |
556 | { |
557 | if (!list_empty(head: list)) |
558 | __list_splice(list, prev: head->prev, next: head); |
559 | } |
560 | |
561 | /** |
562 | * list_splice_init - join two lists and reinitialise the emptied list. |
563 | * @list: the new list to add. |
564 | * @head: the place to add it in the first list. |
565 | * |
566 | * The list at @list is reinitialised |
567 | */ |
568 | static inline void list_splice_init(struct list_head *list, |
569 | struct list_head *head) |
570 | { |
571 | if (!list_empty(head: list)) { |
572 | __list_splice(list, prev: head, next: head->next); |
573 | INIT_LIST_HEAD(list); |
574 | } |
575 | } |
576 | |
577 | /** |
578 | * list_splice_tail_init - join two lists and reinitialise the emptied list |
579 | * @list: the new list to add. |
580 | * @head: the place to add it in the first list. |
581 | * |
582 | * Each of the lists is a queue. |
583 | * The list at @list is reinitialised |
584 | */ |
585 | static inline void list_splice_tail_init(struct list_head *list, |
586 | struct list_head *head) |
587 | { |
588 | if (!list_empty(head: list)) { |
589 | __list_splice(list, prev: head->prev, next: head); |
590 | INIT_LIST_HEAD(list); |
591 | } |
592 | } |
593 | |
594 | /** |
595 | * list_entry - get the struct for this entry |
596 | * @ptr: the &struct list_head pointer. |
597 | * @type: the type of the struct this is embedded in. |
598 | * @member: the name of the list_head within the struct. |
599 | */ |
600 | #define list_entry(ptr, type, member) \ |
601 | container_of(ptr, type, member) |
602 | |
603 | /** |
604 | * list_first_entry - get the first element from a list |
605 | * @ptr: the list head to take the element from. |
606 | * @type: the type of the struct this is embedded in. |
607 | * @member: the name of the list_head within the struct. |
608 | * |
609 | * Note, that list is expected to be not empty. |
610 | */ |
611 | #define list_first_entry(ptr, type, member) \ |
612 | list_entry((ptr)->next, type, member) |
613 | |
614 | /** |
615 | * list_last_entry - get the last element from a list |
616 | * @ptr: the list head to take the element from. |
617 | * @type: the type of the struct this is embedded in. |
618 | * @member: the name of the list_head within the struct. |
619 | * |
620 | * Note, that list is expected to be not empty. |
621 | */ |
622 | #define list_last_entry(ptr, type, member) \ |
623 | list_entry((ptr)->prev, type, member) |
624 | |
625 | /** |
626 | * list_first_entry_or_null - get the first element from a list |
627 | * @ptr: the list head to take the element from. |
628 | * @type: the type of the struct this is embedded in. |
629 | * @member: the name of the list_head within the struct. |
630 | * |
631 | * Note that if the list is empty, it returns NULL. |
632 | */ |
633 | #define list_first_entry_or_null(ptr, type, member) ({ \ |
634 | struct list_head *head__ = (ptr); \ |
635 | struct list_head *pos__ = READ_ONCE(head__->next); \ |
636 | pos__ != head__ ? list_entry(pos__, type, member) : NULL; \ |
637 | }) |
638 | |
639 | /** |
640 | * list_next_entry - get the next element in list |
641 | * @pos: the type * to cursor |
642 | * @member: the name of the list_head within the struct. |
643 | */ |
644 | #define list_next_entry(pos, member) \ |
645 | list_entry((pos)->member.next, typeof(*(pos)), member) |
646 | |
647 | /** |
648 | * list_next_entry_circular - get the next element in list |
649 | * @pos: the type * to cursor. |
650 | * @head: the list head to take the element from. |
651 | * @member: the name of the list_head within the struct. |
652 | * |
653 | * Wraparound if pos is the last element (return the first element). |
654 | * Note, that list is expected to be not empty. |
655 | */ |
656 | #define list_next_entry_circular(pos, head, member) \ |
657 | (list_is_last(&(pos)->member, head) ? \ |
658 | list_first_entry(head, typeof(*(pos)), member) : list_next_entry(pos, member)) |
659 | |
660 | /** |
661 | * list_prev_entry - get the prev element in list |
662 | * @pos: the type * to cursor |
663 | * @member: the name of the list_head within the struct. |
664 | */ |
665 | #define list_prev_entry(pos, member) \ |
666 | list_entry((pos)->member.prev, typeof(*(pos)), member) |
667 | |
668 | /** |
669 | * list_prev_entry_circular - get the prev element in list |
670 | * @pos: the type * to cursor. |
671 | * @head: the list head to take the element from. |
672 | * @member: the name of the list_head within the struct. |
673 | * |
674 | * Wraparound if pos is the first element (return the last element). |
675 | * Note, that list is expected to be not empty. |
676 | */ |
677 | #define list_prev_entry_circular(pos, head, member) \ |
678 | (list_is_first(&(pos)->member, head) ? \ |
679 | list_last_entry(head, typeof(*(pos)), member) : list_prev_entry(pos, member)) |
680 | |
681 | /** |
682 | * list_for_each - iterate over a list |
683 | * @pos: the &struct list_head to use as a loop cursor. |
684 | * @head: the head for your list. |
685 | */ |
686 | #define list_for_each(pos, head) \ |
687 | for (pos = (head)->next; !list_is_head(pos, (head)); pos = pos->next) |
688 | |
689 | /** |
690 | * list_for_each_reverse - iterate backwards over a list |
691 | * @pos: the &struct list_head to use as a loop cursor. |
692 | * @head: the head for your list. |
693 | */ |
694 | #define list_for_each_reverse(pos, head) \ |
695 | for (pos = (head)->prev; pos != (head); pos = pos->prev) |
696 | |
697 | /** |
698 | * list_for_each_rcu - Iterate over a list in an RCU-safe fashion |
699 | * @pos: the &struct list_head to use as a loop cursor. |
700 | * @head: the head for your list. |
701 | */ |
702 | #define list_for_each_rcu(pos, head) \ |
703 | for (pos = rcu_dereference((head)->next); \ |
704 | !list_is_head(pos, (head)); \ |
705 | pos = rcu_dereference(pos->next)) |
706 | |
707 | /** |
708 | * list_for_each_continue - continue iteration over a list |
709 | * @pos: the &struct list_head to use as a loop cursor. |
710 | * @head: the head for your list. |
711 | * |
712 | * Continue to iterate over a list, continuing after the current position. |
713 | */ |
714 | #define list_for_each_continue(pos, head) \ |
715 | for (pos = pos->next; !list_is_head(pos, (head)); pos = pos->next) |
716 | |
717 | /** |
718 | * list_for_each_prev - iterate over a list backwards |
719 | * @pos: the &struct list_head to use as a loop cursor. |
720 | * @head: the head for your list. |
721 | */ |
722 | #define list_for_each_prev(pos, head) \ |
723 | for (pos = (head)->prev; !list_is_head(pos, (head)); pos = pos->prev) |
724 | |
725 | /** |
726 | * list_for_each_safe - iterate over a list safe against removal of list entry |
727 | * @pos: the &struct list_head to use as a loop cursor. |
728 | * @n: another &struct list_head to use as temporary storage |
729 | * @head: the head for your list. |
730 | */ |
731 | #define list_for_each_safe(pos, n, head) \ |
732 | for (pos = (head)->next, n = pos->next; \ |
733 | !list_is_head(pos, (head)); \ |
734 | pos = n, n = pos->next) |
735 | |
736 | /** |
737 | * list_for_each_prev_safe - iterate over a list backwards safe against removal of list entry |
738 | * @pos: the &struct list_head to use as a loop cursor. |
739 | * @n: another &struct list_head to use as temporary storage |
740 | * @head: the head for your list. |
741 | */ |
742 | #define list_for_each_prev_safe(pos, n, head) \ |
743 | for (pos = (head)->prev, n = pos->prev; \ |
744 | !list_is_head(pos, (head)); \ |
745 | pos = n, n = pos->prev) |
746 | |
747 | /** |
748 | * list_count_nodes - count nodes in the list |
749 | * @head: the head for your list. |
750 | */ |
751 | static inline size_t list_count_nodes(struct list_head *head) |
752 | { |
753 | struct list_head *pos; |
754 | size_t count = 0; |
755 | |
756 | list_for_each(pos, head) |
757 | count++; |
758 | |
759 | return count; |
760 | } |
761 | |
762 | /** |
763 | * list_entry_is_head - test if the entry points to the head of the list |
764 | * @pos: the type * to cursor |
765 | * @head: the head for your list. |
766 | * @member: the name of the list_head within the struct. |
767 | */ |
768 | #define list_entry_is_head(pos, head, member) \ |
769 | list_is_head(&pos->member, (head)) |
770 | |
771 | /** |
772 | * list_for_each_entry - iterate over list of given type |
773 | * @pos: the type * to use as a loop cursor. |
774 | * @head: the head for your list. |
775 | * @member: the name of the list_head within the struct. |
776 | */ |
777 | #define list_for_each_entry(pos, head, member) \ |
778 | for (pos = list_first_entry(head, typeof(*pos), member); \ |
779 | !list_entry_is_head(pos, head, member); \ |
780 | pos = list_next_entry(pos, member)) |
781 | |
782 | /** |
783 | * list_for_each_entry_reverse - iterate backwards over list of given type. |
784 | * @pos: the type * to use as a loop cursor. |
785 | * @head: the head for your list. |
786 | * @member: the name of the list_head within the struct. |
787 | */ |
788 | #define list_for_each_entry_reverse(pos, head, member) \ |
789 | for (pos = list_last_entry(head, typeof(*pos), member); \ |
790 | !list_entry_is_head(pos, head, member); \ |
791 | pos = list_prev_entry(pos, member)) |
792 | |
793 | /** |
794 | * list_prepare_entry - prepare a pos entry for use in list_for_each_entry_continue() |
795 | * @pos: the type * to use as a start point |
796 | * @head: the head of the list |
797 | * @member: the name of the list_head within the struct. |
798 | * |
799 | * Prepares a pos entry for use as a start point in list_for_each_entry_continue(). |
800 | */ |
801 | #define list_prepare_entry(pos, head, member) \ |
802 | ((pos) ? : list_entry(head, typeof(*pos), member)) |
803 | |
804 | /** |
805 | * list_for_each_entry_continue - continue iteration over list of given type |
806 | * @pos: the type * to use as a loop cursor. |
807 | * @head: the head for your list. |
808 | * @member: the name of the list_head within the struct. |
809 | * |
810 | * Continue to iterate over list of given type, continuing after |
811 | * the current position. |
812 | */ |
813 | #define list_for_each_entry_continue(pos, head, member) \ |
814 | for (pos = list_next_entry(pos, member); \ |
815 | !list_entry_is_head(pos, head, member); \ |
816 | pos = list_next_entry(pos, member)) |
817 | |
818 | /** |
819 | * list_for_each_entry_continue_reverse - iterate backwards from the given point |
820 | * @pos: the type * to use as a loop cursor. |
821 | * @head: the head for your list. |
822 | * @member: the name of the list_head within the struct. |
823 | * |
824 | * Start to iterate over list of given type backwards, continuing after |
825 | * the current position. |
826 | */ |
827 | #define list_for_each_entry_continue_reverse(pos, head, member) \ |
828 | for (pos = list_prev_entry(pos, member); \ |
829 | !list_entry_is_head(pos, head, member); \ |
830 | pos = list_prev_entry(pos, member)) |
831 | |
832 | /** |
833 | * list_for_each_entry_from - iterate over list of given type from the current point |
834 | * @pos: the type * to use as a loop cursor. |
835 | * @head: the head for your list. |
836 | * @member: the name of the list_head within the struct. |
837 | * |
838 | * Iterate over list of given type, continuing from current position. |
839 | */ |
840 | #define list_for_each_entry_from(pos, head, member) \ |
841 | for (; !list_entry_is_head(pos, head, member); \ |
842 | pos = list_next_entry(pos, member)) |
843 | |
844 | /** |
845 | * list_for_each_entry_from_reverse - iterate backwards over list of given type |
846 | * from the current point |
847 | * @pos: the type * to use as a loop cursor. |
848 | * @head: the head for your list. |
849 | * @member: the name of the list_head within the struct. |
850 | * |
851 | * Iterate backwards over list of given type, continuing from current position. |
852 | */ |
853 | #define list_for_each_entry_from_reverse(pos, head, member) \ |
854 | for (; !list_entry_is_head(pos, head, member); \ |
855 | pos = list_prev_entry(pos, member)) |
856 | |
857 | /** |
858 | * list_for_each_entry_safe - iterate over list of given type safe against removal of list entry |
859 | * @pos: the type * to use as a loop cursor. |
860 | * @n: another type * to use as temporary storage |
861 | * @head: the head for your list. |
862 | * @member: the name of the list_head within the struct. |
863 | */ |
864 | #define list_for_each_entry_safe(pos, n, head, member) \ |
865 | for (pos = list_first_entry(head, typeof(*pos), member), \ |
866 | n = list_next_entry(pos, member); \ |
867 | !list_entry_is_head(pos, head, member); \ |
868 | pos = n, n = list_next_entry(n, member)) |
869 | |
870 | /** |
871 | * list_for_each_entry_safe_continue - continue list iteration safe against removal |
872 | * @pos: the type * to use as a loop cursor. |
873 | * @n: another type * to use as temporary storage |
874 | * @head: the head for your list. |
875 | * @member: the name of the list_head within the struct. |
876 | * |
877 | * Iterate over list of given type, continuing after current point, |
878 | * safe against removal of list entry. |
879 | */ |
880 | #define list_for_each_entry_safe_continue(pos, n, head, member) \ |
881 | for (pos = list_next_entry(pos, member), \ |
882 | n = list_next_entry(pos, member); \ |
883 | !list_entry_is_head(pos, head, member); \ |
884 | pos = n, n = list_next_entry(n, member)) |
885 | |
886 | /** |
887 | * list_for_each_entry_safe_from - iterate over list from current point safe against removal |
888 | * @pos: the type * to use as a loop cursor. |
889 | * @n: another type * to use as temporary storage |
890 | * @head: the head for your list. |
891 | * @member: the name of the list_head within the struct. |
892 | * |
893 | * Iterate over list of given type from current point, safe against |
894 | * removal of list entry. |
895 | */ |
896 | #define list_for_each_entry_safe_from(pos, n, head, member) \ |
897 | for (n = list_next_entry(pos, member); \ |
898 | !list_entry_is_head(pos, head, member); \ |
899 | pos = n, n = list_next_entry(n, member)) |
900 | |
901 | /** |
902 | * list_for_each_entry_safe_reverse - iterate backwards over list safe against removal |
903 | * @pos: the type * to use as a loop cursor. |
904 | * @n: another type * to use as temporary storage |
905 | * @head: the head for your list. |
906 | * @member: the name of the list_head within the struct. |
907 | * |
908 | * Iterate backwards over list of given type, safe against removal |
909 | * of list entry. |
910 | */ |
911 | #define list_for_each_entry_safe_reverse(pos, n, head, member) \ |
912 | for (pos = list_last_entry(head, typeof(*pos), member), \ |
913 | n = list_prev_entry(pos, member); \ |
914 | !list_entry_is_head(pos, head, member); \ |
915 | pos = n, n = list_prev_entry(n, member)) |
916 | |
917 | /** |
918 | * list_safe_reset_next - reset a stale list_for_each_entry_safe loop |
919 | * @pos: the loop cursor used in the list_for_each_entry_safe loop |
920 | * @n: temporary storage used in list_for_each_entry_safe |
921 | * @member: the name of the list_head within the struct. |
922 | * |
923 | * list_safe_reset_next is not safe to use in general if the list may be |
924 | * modified concurrently (eg. the lock is dropped in the loop body). An |
925 | * exception to this is if the cursor element (pos) is pinned in the list, |
926 | * and list_safe_reset_next is called after re-taking the lock and before |
927 | * completing the current iteration of the loop body. |
928 | */ |
929 | #define list_safe_reset_next(pos, n, member) \ |
930 | n = list_next_entry(pos, member) |
931 | |
932 | /* |
933 | * Double linked lists with a single pointer list head. |
934 | * Mostly useful for hash tables where the two pointer list head is |
935 | * too wasteful. |
936 | * You lose the ability to access the tail in O(1). |
937 | */ |
938 | |
939 | #define HLIST_HEAD_INIT { .first = NULL } |
940 | #define HLIST_HEAD(name) struct hlist_head name = { .first = NULL } |
941 | #define INIT_HLIST_HEAD(ptr) ((ptr)->first = NULL) |
942 | static inline void INIT_HLIST_NODE(struct hlist_node *h) |
943 | { |
944 | h->next = NULL; |
945 | h->pprev = NULL; |
946 | } |
947 | |
948 | /** |
949 | * hlist_unhashed - Has node been removed from list and reinitialized? |
950 | * @h: Node to be checked |
951 | * |
952 | * Not that not all removal functions will leave a node in unhashed |
953 | * state. For example, hlist_nulls_del_init_rcu() does leave the |
954 | * node in unhashed state, but hlist_nulls_del() does not. |
955 | */ |
956 | static inline int hlist_unhashed(const struct hlist_node *h) |
957 | { |
958 | return !h->pprev; |
959 | } |
960 | |
961 | /** |
962 | * hlist_unhashed_lockless - Version of hlist_unhashed for lockless use |
963 | * @h: Node to be checked |
964 | * |
965 | * This variant of hlist_unhashed() must be used in lockless contexts |
966 | * to avoid potential load-tearing. The READ_ONCE() is paired with the |
967 | * various WRITE_ONCE() in hlist helpers that are defined below. |
968 | */ |
969 | static inline int hlist_unhashed_lockless(const struct hlist_node *h) |
970 | { |
971 | return !READ_ONCE(h->pprev); |
972 | } |
973 | |
974 | /** |
975 | * hlist_empty - Is the specified hlist_head structure an empty hlist? |
976 | * @h: Structure to check. |
977 | */ |
978 | static inline int hlist_empty(const struct hlist_head *h) |
979 | { |
980 | return !READ_ONCE(h->first); |
981 | } |
982 | |
983 | static inline void __hlist_del(struct hlist_node *n) |
984 | { |
985 | struct hlist_node *next = n->next; |
986 | struct hlist_node **pprev = n->pprev; |
987 | |
988 | WRITE_ONCE(*pprev, next); |
989 | if (next) |
990 | WRITE_ONCE(next->pprev, pprev); |
991 | } |
992 | |
993 | /** |
994 | * hlist_del - Delete the specified hlist_node from its list |
995 | * @n: Node to delete. |
996 | * |
997 | * Note that this function leaves the node in hashed state. Use |
998 | * hlist_del_init() or similar instead to unhash @n. |
999 | */ |
1000 | static inline void hlist_del(struct hlist_node *n) |
1001 | { |
1002 | __hlist_del(n); |
1003 | n->next = LIST_POISON1; |
1004 | n->pprev = LIST_POISON2; |
1005 | } |
1006 | |
1007 | /** |
1008 | * hlist_del_init - Delete the specified hlist_node from its list and initialize |
1009 | * @n: Node to delete. |
1010 | * |
1011 | * Note that this function leaves the node in unhashed state. |
1012 | */ |
1013 | static inline void hlist_del_init(struct hlist_node *n) |
1014 | { |
1015 | if (!hlist_unhashed(h: n)) { |
1016 | __hlist_del(n); |
1017 | INIT_HLIST_NODE(h: n); |
1018 | } |
1019 | } |
1020 | |
1021 | /** |
1022 | * hlist_add_head - add a new entry at the beginning of the hlist |
1023 | * @n: new entry to be added |
1024 | * @h: hlist head to add it after |
1025 | * |
1026 | * Insert a new entry after the specified head. |
1027 | * This is good for implementing stacks. |
1028 | */ |
1029 | static inline void hlist_add_head(struct hlist_node *n, struct hlist_head *h) |
1030 | { |
1031 | struct hlist_node *first = h->first; |
1032 | WRITE_ONCE(n->next, first); |
1033 | if (first) |
1034 | WRITE_ONCE(first->pprev, &n->next); |
1035 | WRITE_ONCE(h->first, n); |
1036 | WRITE_ONCE(n->pprev, &h->first); |
1037 | } |
1038 | |
1039 | /** |
1040 | * hlist_add_before - add a new entry before the one specified |
1041 | * @n: new entry to be added |
1042 | * @next: hlist node to add it before, which must be non-NULL |
1043 | */ |
1044 | static inline void hlist_add_before(struct hlist_node *n, |
1045 | struct hlist_node *next) |
1046 | { |
1047 | WRITE_ONCE(n->pprev, next->pprev); |
1048 | WRITE_ONCE(n->next, next); |
1049 | WRITE_ONCE(next->pprev, &n->next); |
1050 | WRITE_ONCE(*(n->pprev), n); |
1051 | } |
1052 | |
1053 | /** |
1054 | * hlist_add_behind - add a new entry after the one specified |
1055 | * @n: new entry to be added |
1056 | * @prev: hlist node to add it after, which must be non-NULL |
1057 | */ |
1058 | static inline void hlist_add_behind(struct hlist_node *n, |
1059 | struct hlist_node *prev) |
1060 | { |
1061 | WRITE_ONCE(n->next, prev->next); |
1062 | WRITE_ONCE(prev->next, n); |
1063 | WRITE_ONCE(n->pprev, &prev->next); |
1064 | |
1065 | if (n->next) |
1066 | WRITE_ONCE(n->next->pprev, &n->next); |
1067 | } |
1068 | |
1069 | /** |
1070 | * hlist_add_fake - create a fake hlist consisting of a single headless node |
1071 | * @n: Node to make a fake list out of |
1072 | * |
1073 | * This makes @n appear to be its own predecessor on a headless hlist. |
1074 | * The point of this is to allow things like hlist_del() to work correctly |
1075 | * in cases where there is no list. |
1076 | */ |
1077 | static inline void hlist_add_fake(struct hlist_node *n) |
1078 | { |
1079 | n->pprev = &n->next; |
1080 | } |
1081 | |
1082 | /** |
1083 | * hlist_fake: Is this node a fake hlist? |
1084 | * @h: Node to check for being a self-referential fake hlist. |
1085 | */ |
1086 | static inline bool hlist_fake(struct hlist_node *h) |
1087 | { |
1088 | return h->pprev == &h->next; |
1089 | } |
1090 | |
1091 | /** |
1092 | * hlist_is_singular_node - is node the only element of the specified hlist? |
1093 | * @n: Node to check for singularity. |
1094 | * @h: Header for potentially singular list. |
1095 | * |
1096 | * Check whether the node is the only node of the head without |
1097 | * accessing head, thus avoiding unnecessary cache misses. |
1098 | */ |
1099 | static inline bool |
1100 | hlist_is_singular_node(struct hlist_node *n, struct hlist_head *h) |
1101 | { |
1102 | return !n->next && n->pprev == &h->first; |
1103 | } |
1104 | |
1105 | /** |
1106 | * hlist_move_list - Move an hlist |
1107 | * @old: hlist_head for old list. |
1108 | * @new: hlist_head for new list. |
1109 | * |
1110 | * Move a list from one list head to another. Fixup the pprev |
1111 | * reference of the first entry if it exists. |
1112 | */ |
1113 | static inline void hlist_move_list(struct hlist_head *old, |
1114 | struct hlist_head *new) |
1115 | { |
1116 | new->first = old->first; |
1117 | if (new->first) |
1118 | new->first->pprev = &new->first; |
1119 | old->first = NULL; |
1120 | } |
1121 | |
1122 | /** |
1123 | * hlist_splice_init() - move all entries from one list to another |
1124 | * @from: hlist_head from which entries will be moved |
1125 | * @last: last entry on the @from list |
1126 | * @to: hlist_head to which entries will be moved |
1127 | * |
1128 | * @to can be empty, @from must contain at least @last. |
1129 | */ |
1130 | static inline void hlist_splice_init(struct hlist_head *from, |
1131 | struct hlist_node *last, |
1132 | struct hlist_head *to) |
1133 | { |
1134 | if (to->first) |
1135 | to->first->pprev = &last->next; |
1136 | last->next = to->first; |
1137 | to->first = from->first; |
1138 | from->first->pprev = &to->first; |
1139 | from->first = NULL; |
1140 | } |
1141 | |
1142 | #define hlist_entry(ptr, type, member) container_of(ptr,type,member) |
1143 | |
1144 | #define hlist_for_each(pos, head) \ |
1145 | for (pos = (head)->first; pos ; pos = pos->next) |
1146 | |
1147 | #define hlist_for_each_safe(pos, n, head) \ |
1148 | for (pos = (head)->first; pos && ({ n = pos->next; 1; }); \ |
1149 | pos = n) |
1150 | |
1151 | #define hlist_entry_safe(ptr, type, member) \ |
1152 | ({ typeof(ptr) ____ptr = (ptr); \ |
1153 | ____ptr ? hlist_entry(____ptr, type, member) : NULL; \ |
1154 | }) |
1155 | |
1156 | /** |
1157 | * hlist_for_each_entry - iterate over list of given type |
1158 | * @pos: the type * to use as a loop cursor. |
1159 | * @head: the head for your list. |
1160 | * @member: the name of the hlist_node within the struct. |
1161 | */ |
1162 | #define hlist_for_each_entry(pos, head, member) \ |
1163 | for (pos = hlist_entry_safe((head)->first, typeof(*(pos)), member);\ |
1164 | pos; \ |
1165 | pos = hlist_entry_safe((pos)->member.next, typeof(*(pos)), member)) |
1166 | |
1167 | /** |
1168 | * hlist_for_each_entry_continue - iterate over a hlist continuing after current point |
1169 | * @pos: the type * to use as a loop cursor. |
1170 | * @member: the name of the hlist_node within the struct. |
1171 | */ |
1172 | #define hlist_for_each_entry_continue(pos, member) \ |
1173 | for (pos = hlist_entry_safe((pos)->member.next, typeof(*(pos)), member);\ |
1174 | pos; \ |
1175 | pos = hlist_entry_safe((pos)->member.next, typeof(*(pos)), member)) |
1176 | |
1177 | /** |
1178 | * hlist_for_each_entry_from - iterate over a hlist continuing from current point |
1179 | * @pos: the type * to use as a loop cursor. |
1180 | * @member: the name of the hlist_node within the struct. |
1181 | */ |
1182 | #define hlist_for_each_entry_from(pos, member) \ |
1183 | for (; pos; \ |
1184 | pos = hlist_entry_safe((pos)->member.next, typeof(*(pos)), member)) |
1185 | |
1186 | /** |
1187 | * hlist_for_each_entry_safe - iterate over list of given type safe against removal of list entry |
1188 | * @pos: the type * to use as a loop cursor. |
1189 | * @n: a &struct hlist_node to use as temporary storage |
1190 | * @head: the head for your list. |
1191 | * @member: the name of the hlist_node within the struct. |
1192 | */ |
1193 | #define hlist_for_each_entry_safe(pos, n, head, member) \ |
1194 | for (pos = hlist_entry_safe((head)->first, typeof(*pos), member);\ |
1195 | pos && ({ n = pos->member.next; 1; }); \ |
1196 | pos = hlist_entry_safe(n, typeof(*pos), member)) |
1197 | |
1198 | /** |
1199 | * hlist_count_nodes - count nodes in the hlist |
1200 | * @head: the head for your hlist. |
1201 | */ |
1202 | static inline size_t hlist_count_nodes(struct hlist_head *head) |
1203 | { |
1204 | struct hlist_node *pos; |
1205 | size_t count = 0; |
1206 | |
1207 | hlist_for_each(pos, head) |
1208 | count++; |
1209 | |
1210 | return count; |
1211 | } |
1212 | |
1213 | #endif |
1214 | |