34 #define LIST_POISON1 ((void *) 0x00100100)
35 #define LIST_POISON2 ((void *) 0x00200200)
37 #define container_of(ptr, type, member) ({ \
38 const typeof( ((type *)0)->member ) *__mptr = (ptr); \
39 (type *)( (char *)__mptr - offsetof(type,member) );})
55 #define LIST_HEAD_INIT(name) { &(name), &(name) }
57 #define LIST_HEAD(name) \
58 struct list_head name = LIST_HEAD_INIT(name)
60 #define INIT_LIST_HEAD(ptr) do { \
61 (ptr)->next = (ptr); (ptr)->prev = (ptr); \
64 #define list_top(head, type, member) \
66 struct list_head *_head = (head); \
67 list_empty(_head) ? NULL : list_entry(_head->next, type, member); \
76 static inline void __list_add(
struct list_head *newn,
96 __list_add(newn, head, head->
next);
109 __list_add(newn, head->
prev, head);
132 static __inline__
void __list_add_rcu(
struct list_head * newn,
152 __list_add_rcu(newn, head, head->
next);
163 static __inline__
void list_add_tail_rcu(
struct list_head *newn,
struct list_head *head)
165 __list_add_rcu(newn, head->
prev, head);
187 static inline void list_del(
struct list_head *entry)
189 __list_del(entry->
prev, entry->
next);
205 static inline void list_del_rcu(
struct list_head *entry)
207 __list_del(entry->
prev, entry->
next);
215 static inline void list_del_init(
struct list_head *entry)
217 __list_del(entry->
prev, entry->
next);
229 list_add(list, head);
237 static inline void list_move_tail(
struct list_head *list,
241 list_add_tail(list, head);
248 static inline int list_empty(
struct list_head *head)
250 return head->
next == head;
253 static inline void __list_splice(
struct list_head *list,
274 if (!list_empty(list))
275 __list_splice(list, head);
285 static inline void list_splice_init(
struct list_head *list,
288 if (!list_empty(list)) {
289 __list_splice(list, head);
300 #define list_entry(ptr, type, member) \
301 container_of(ptr, type, member)
308 #define list_for_each(pos, head) \
309 for (pos = (head)->next; pos != (head); pos = pos->next)
316 #define list_for_each_prev(pos, head) \
317 for (pos = (head)->prev; pos != (head); pos = pos->prev)
325 #define list_for_each_safe(pos, n, head) \
326 for (pos = (head)->next, n = pos->next; pos != (head); \
327 pos = n, n = pos->next)
335 #define list_for_each_entry(pos, head, member) \
336 for (pos = list_entry((head)->next, typeof(*pos), member); \
337 &pos->member != (head); \
338 pos = list_entry(pos->member.next, typeof(*pos), member))
349 #define list_for_each_entry_dual(pos, pos2, head, head2, member, member2) \
350 for (pos = list_entry((head)->next, typeof(*pos), member), \
351 pos2 = list_entry((head2)->next, typeof(*pos2), member2); \
352 &pos->member != (head) && &pos2->member2 != (head2); \
353 pos = list_entry(pos->member.next, typeof(*pos), member), \
354 pos2 = list_entry(pos2->member2.next, typeof(*pos2), member2))
362 #define list_for_each_entry_reverse(pos, head, member) \
363 for (pos = list_entry((head)->prev, typeof(*pos), member); \
364 &pos->member != (head); \
365 pos = list_entry(pos->member.prev, typeof(*pos), member))
375 #define list_for_each_entry_continue(pos, head, member) \
376 for (pos = list_entry(pos->member.next, typeof(*pos), member); \
377 &pos->member != (head); \
378 pos = list_entry(pos->member.next, typeof(*pos), member))
387 #define list_for_each_entry_safe(pos, n, head, member) \
388 for (pos = list_entry((head)->next, typeof(*pos), member), \
389 n = list_entry(pos->member.next, typeof(*pos), member); \
390 &pos->member != (head); \
391 pos = n, n = list_entry(n->member.next, typeof(*n), member))
409 #define HLIST_HEAD_INIT { .first = NULL }
410 #define HLIST_HEAD(name) struct hlist_head name = { .first = NULL }
411 #define INIT_HLIST_HEAD(ptr) ((ptr)->first = NULL)
412 #define INIT_HLIST_NODE(ptr) ((ptr)->next = NULL, (ptr)->pprev = NULL)
414 static __inline__
int hlist_unhashed(
struct hlist_node *h)
419 static __inline__
int hlist_empty(
struct hlist_head *h)
424 static __inline__
void __hlist_del(
struct hlist_node *n)
433 static __inline__
void hlist_del(
struct hlist_node *n)
451 static inline void hlist_del_rcu(
struct hlist_node *n)
457 static __inline__
void hlist_del_init(
struct hlist_node *n)
465 #define hlist_del_rcu_init hlist_del_init
496 static __inline__
void hlist_add_after(
struct hlist_node *n,
504 #define hlist_entry(ptr, type, member) container_of(ptr,type,member)
507 #define hlist_for_each(pos, head) \
508 for (pos = (head)->first; pos; pos = pos->next)
510 #define hlist_for_each_safe(pos, n, head) \
511 for (pos = (head)->first; n = pos ? pos->next : 0, pos; \
521 #define hlist_for_each_entry(tpos, pos, head, member) \
522 for (pos = (head)->first; \
523 pos && ({ tpos = hlist_entry(pos, typeof(*tpos), member); 1;}); \
532 #define hlist_for_each_entry_continue(tpos, pos, member) \
533 for (pos = (pos)->next; \
534 pos && ({ tpos = hlist_entry(pos, typeof(*tpos), member); 1;}); \
543 #define hlist_for_each_entry_from(tpos, pos, member) \
544 for (; pos && ({ tpos = hlist_entry(pos, typeof(*tpos), member); 1;}); \
555 #define hlist_for_each_entry_safe(tpos, pos, n, head, member) \
556 for (pos = (head)->first; \
557 pos && ({ n = pos->next; 1; }) && \
558 ({ tpos = hlist_entry(pos, typeof(*tpos), member); 1;}); \
#define INIT_HLIST_NODE(ptr)
struct hlist_node * first
struct hlist_node ** pprev
#define INIT_LIST_HEAD(ptr)