5,8 → 5,6 |
#include <linux/stddef.h> |
#include <linux/poison.h> |
|
#define prefetch(x) __builtin_prefetch(x) |
|
/* |
* Simple doubly linked list implementation. |
* |
97,6 → 95,11 |
* in an undefined state. |
*/ |
#ifndef CONFIG_DEBUG_LIST |
static inline void __list_del_entry(struct list_head *entry) |
{ |
__list_del(entry->prev, entry->next); |
} |
|
static inline void list_del(struct list_head *entry) |
{ |
__list_del(entry->prev, entry->next); |
104,6 → 107,7 |
entry->prev = LIST_POISON2; |
} |
#else |
extern void __list_del_entry(struct list_head *entry); |
extern void list_del(struct list_head *entry); |
#endif |
|
136,7 → 140,7 |
*/ |
static inline void list_del_init(struct list_head *entry) |
{ |
__list_del(entry->prev, entry->next); |
__list_del_entry(entry); |
INIT_LIST_HEAD(entry); |
} |
|
147,7 → 151,7 |
*/ |
static inline void list_move(struct list_head *list, struct list_head *head) |
{ |
__list_del(list->prev, list->next); |
__list_del_entry(list); |
list_add(list, head); |
} |
|
159,7 → 163,7 |
static inline void list_move_tail(struct list_head *list, |
struct list_head *head) |
{ |
__list_del(list->prev, list->next); |
__list_del_entry(list); |
list_add_tail(list, head); |
} |
|
362,8 → 366,7 |
* @head: the head for your list. |
*/ |
#define list_for_each(pos, head) \ |
for (pos = (head)->next; prefetch(pos->next), pos != (head); \ |
pos = pos->next) |
for (pos = (head)->next; pos != (head); pos = pos->next) |
|
/** |
* __list_for_each - iterate over a list |
370,10 → 373,8 |
* @pos: the &struct list_head to use as a loop cursor. |
* @head: the head for your list. |
* |
* This variant differs from list_for_each() in that it's the |
* simplest possible list iteration code, no prefetching is done. |
* Use this for code that knows the list to be very short (empty |
* or 1 entry) most of the time. |
* This variant doesn't differ from list_for_each() any more. |
* We don't do prefetching in either case. |
*/ |
#define __list_for_each(pos, head) \ |
for (pos = (head)->next; pos != (head); pos = pos->next) |
384,8 → 385,7 |
* @head: the head for your list. |
*/ |
#define list_for_each_prev(pos, head) \ |
for (pos = (head)->prev; prefetch(pos->prev), pos != (head); \ |
pos = pos->prev) |
for (pos = (head)->prev; pos != (head); pos = pos->prev) |
|
/** |
* list_for_each_safe - iterate over a list safe against removal of list entry |
405,7 → 405,7 |
*/ |
#define list_for_each_prev_safe(pos, n, head) \ |
for (pos = (head)->prev, n = pos->prev; \ |
prefetch(pos->prev), pos != (head); \ |
pos != (head); \ |
pos = n, n = pos->prev) |
|
/** |
416,7 → 416,7 |
*/ |
#define list_for_each_entry(pos, head, member) \ |
for (pos = list_entry((head)->next, typeof(*pos), member); \ |
prefetch(pos->member.next), &pos->member != (head); \ |
&pos->member != (head); \ |
pos = list_entry(pos->member.next, typeof(*pos), member)) |
|
/** |
427,7 → 427,7 |
*/ |
#define list_for_each_entry_reverse(pos, head, member) \ |
for (pos = list_entry((head)->prev, typeof(*pos), member); \ |
prefetch(pos->member.prev), &pos->member != (head); \ |
&pos->member != (head); \ |
pos = list_entry(pos->member.prev, typeof(*pos), member)) |
|
/** |
452,7 → 452,7 |
*/ |
#define list_for_each_entry_continue(pos, head, member) \ |
for (pos = list_entry(pos->member.next, typeof(*pos), member); \ |
prefetch(pos->member.next), &pos->member != (head); \ |
&pos->member != (head); \ |
pos = list_entry(pos->member.next, typeof(*pos), member)) |
|
/** |
466,7 → 466,7 |
*/ |
#define list_for_each_entry_continue_reverse(pos, head, member) \ |
for (pos = list_entry(pos->member.prev, typeof(*pos), member); \ |
prefetch(pos->member.prev), &pos->member != (head); \ |
&pos->member != (head); \ |
pos = list_entry(pos->member.prev, typeof(*pos), member)) |
|
/** |
478,7 → 478,7 |
* Iterate over list of given type, continuing from current position. |
*/ |
#define list_for_each_entry_from(pos, head, member) \ |
for (; prefetch(pos->member.next), &pos->member != (head); \ |
for (; &pos->member != (head); \ |
pos = list_entry(pos->member.next, typeof(*pos), member)) |
|
/** |
659,8 → 659,7 |
#define hlist_entry(ptr, type, member) container_of(ptr,type,member) |
|
#define hlist_for_each(pos, head) \ |
for (pos = (head)->first; pos && ({ prefetch(pos->next); 1; }); \ |
pos = pos->next) |
for (pos = (head)->first; pos ; pos = pos->next) |
|
#define hlist_for_each_safe(pos, n, head) \ |
for (pos = (head)->first; pos && ({ n = pos->next; 1; }); \ |
675,7 → 674,7 |
*/ |
#define hlist_for_each_entry(tpos, pos, head, member) \ |
for (pos = (head)->first; \ |
pos && ({ prefetch(pos->next); 1;}) && \ |
pos && \ |
({ tpos = hlist_entry(pos, typeof(*tpos), member); 1;}); \ |
pos = pos->next) |
|
687,7 → 686,7 |
*/ |
#define hlist_for_each_entry_continue(tpos, pos, member) \ |
for (pos = (pos)->next; \ |
pos && ({ prefetch(pos->next); 1;}) && \ |
pos && \ |
({ tpos = hlist_entry(pos, typeof(*tpos), member); 1;}); \ |
pos = pos->next) |
|
698,7 → 697,7 |
* @member: the name of the hlist_node within the struct. |
*/ |
#define hlist_for_each_entry_from(tpos, pos, member) \ |
for (; pos && ({ prefetch(pos->next); 1;}) && \ |
for (; pos && \ |
({ tpos = hlist_entry(pos, typeof(*tpos), member); 1;}); \ |
pos = pos->next) |
|