Linked list
struct list_head { struct list_head *next;};struct list_head referenced types:
void INIT_LIST_HEAD(struct list_head *list);INIT_LIST_HEAD referenced types:
void __list_add(struct list_head *new, struct list_head *prev, struct list_head *next);__list_add referenced types:
void list_add(struct list_head *new, struct list_head *head);list_add referenced types:
void list_add_tail(struct list_head *new, struct list_head *head);list_add_tail referenced types:
void __list_del(struct list_head *prev, struct list_head *next);__list_del referenced types:
void list_del(struct list_head *entry);list_del referenced types:
void list_del_init(struct list_head *entry);list_del_init referenced types:
int list_empty(struct list_head *head);list_empty referenced types:
struct list_head list_pop_front(struct list_head *head);list_pop_front referenced types:
struct list_head list_pop_front_init(struct list_head *head);list_pop_front_init referenced types:
void __list_splice(struct list_head *list, struct list_head *prev, struct list_head *next);__list_splice referenced types:
void list_splice_init(struct list_head *src, struct list_head *dst);list_splice_init referenced types:
void list_splice_tail_init(struct list_head *list, struct list_head *head);list_splice_tail_init referenced types:
Defines
Section titled “Defines”#define LIST_HEAD_INIT(name) {&(name), &(name)}#define LIST_HEAD(name) struct list_head name = LIST_HEAD_INIT(name)#define list_entry(ptr, type, member) \ ((type *) ((char *) (ptr) - (offsetof(type, member))))#define list_for_each(pos, head) \ for (pos = (head)->next; pos != (head); pos = pos->next)#define list_for_each_safe(pos, n, head) \ for (pos = (head)->next, n = pos->next; pos != (head); \ pos = n, n = pos->next)#define list_for_each_entry(pos, head, member) \ for (pos = list_entry((head)->next, typeof(*pos), member); \ &pos->member != (head); \ pos = list_entry(pos->member.next, typeof(*pos), member))#define list_first_entry(ptr, type, member) \ list_entry((ptr)->next, type, member)list_for_each_entry_safe(pos, n, head, member)
Section titled “list_for_each_entry_safe(pos, n, head, member)”#define list_for_each_entry_safe(pos, n, head, member) \ for (pos = list_entry((head)->next, typeof(*pos), member), \ n = list_entry(pos->member.next, typeof(*pos), member); \ &pos->member != (head); \ pos = n, n = list_entry(n->member.next, typeof(*n), member))list_for_each_entry_safe_continue(pos, n, head, member)
Section titled “list_for_each_entry_safe_continue(pos, n, head, member)”#define list_for_each_entry_safe_continue(pos, n, head, member) \ for (pos = list_entry(pos->member.next, typeof(*pos), member), \ n = list_entry(pos->member.next, typeof(*pos), member); \ &pos->member != (head); \ pos = n, n = list_entry(n->member.next, typeof(*n), member))#define SLIST_HEAD(name, type) \ struct name { \ struct type *slh_first; \ }#define SLIST_EMPTY(head) ((head)->slh_first == NULL)#define SLIST_HEAD_INIT(head) {.slh_first = NULL}#define SLIST_INIT(head) \ do { \ (head)->slh_first = NULL; \ } while (0)#define SLIST_ENTRY(type) \ struct { \ struct type *sle_next; \ }#define SLIST_FIRST(head) ((head)->slh_first)#define SLIST_NEXT(elm, field) ((elm)->field.sle_next)#define SLIST_INSERT_HEAD(head, elm, field) \ do { \ (elm)->field.sle_next = (head)->slh_first; \ (head)->slh_first = (elm); \ } while (0)#define SLIST_REMOVE_HEAD(head, field) \ do { \ (head)->slh_first = (head)->slh_first->field.sle_next; \ } while (0)#define SLIST_FOREACH(var, head, field) \ for ((var) = (head)->slh_first; (var); (var) = (var)->field.sle_next)