Go to the documentation of this file.
16 #define LIST_HEAD_INIT(list) { &(list), &(list) }
21 #define LIST_HEAD(list) struct list_head list = LIST_HEAD_INIT(list)
26 #define LIST_NEXT(name) ((name)->next)
31 #define LIST_PREV(name) ((name)->prev)
47 #define list_entry(ptr, type, member) \
48 container_of(ptr, type, member)
53 #define list_next_entry(ptr, type, member) \
54 (((ptr)->next == (ptr)) ? NULL : \
55 list_entry((ptr)->next, type, member))
60 #define list_prev_entry(ptr, type, member) \
61 (((ptr)->prev == (ptr)) ? NULL : \
62 list_entry((ptr)->prev, type, member))
67 #define list_for_each(pos, head) \
68 for (pos = (head)->next; \
69 prefetch(pos->next), pos != (head); pos = pos->next)
74 #define list_for_each_prev(pos, head) \
75 for (pos = (head)->prev; \
76 prefetch(pos->prev), pos != (head); pos = pos->prev)
81 #define list_for_each_safe(pos, n, head) \
82 for (pos = (head)->next, n = pos->next; \
83 pos != (head); pos = n, n = pos->next)
88 #define list_for_each_prev_safe(pos, n, head) \
89 for (pos = (head)->prev, n = pos->prev; \
90 prefetch(pos->prev), pos != (head); pos = n, n = pos->prev)
95 #define list_for_each_entry(pos, head, member) \
96 for (pos = list_entry((head)->next, typeof(*pos), member); \
97 prefetch(pos->member.next), &pos->member != (head); \
98 pos = list_entry(pos->member.next, typeof(*pos), member))
114 static inline void __list_add(
struct list_head *
new,
133 __list_add(
new, head, head->
next);
145 __list_add(
new, head->
prev, head);
156 static inline void list_insert_after(
struct list_head *
new,
159 new->next = head->
next;
174 static inline void list_insert_before(
struct list_head *
new,
201 __list_del(entry->
prev, entry->
next);