⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 list.h

📁 xen虚拟机源代码安装包
💻 H
📖 第 1 页 / 共 3 页
字号:
 * * NOTE: using list_empty_careful() without synchronization * can only be safe if the only activity that can happen * to the list entry is list_del_init(). Eg. it cannot be used * if another CPU could re-list_add() it. */static inline int list_empty_careful(const struct list_head *head){    struct list_head *next = head->next;    return (next == head) && (next == head->prev);}static inline void __list_splice(struct list_head *list,                                 struct list_head *head){    struct list_head *first = list->next;    struct list_head *last = list->prev;    struct list_head *at = head->next;    first->prev = head;    head->next = first;    last->next = at;    at->prev = last;}/** * list_splice - join two lists * @list: the new list to add. * @head: the place to add it in the first list. */static inline void list_splice(struct list_head *list, struct list_head *head){    if (!list_empty(list))        __list_splice(list, head);}/** * list_splice_init - join two lists and reinitialise the emptied list. * @list: the new list to add. * @head: the place to add it in the first list. * * The list at @list is reinitialised */static inline void list_splice_init(struct list_head *list,                                    struct list_head *head){    if (!list_empty(list)) {        __list_splice(list, head);        INIT_LIST_HEAD(list);    }}/** * list_entry - get the struct for this entry * @ptr:    the &struct list_head pointer. * @type:    the type of the struct this is embedded in. * @member:    the name of the list_struct within the struct. */#define list_entry(ptr, type, member) \    container_of(ptr, type, member)/** * list_for_each    -    iterate over a list * @pos:    the &struct list_head to use as a loop cursor. * @head:    the head for your list. */#define list_for_each(pos, head)                                        \    for (pos = (head)->next; prefetch(pos->next), pos != (head);        \         pos = pos->next)/** * __list_for_each - iterate over a list * @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. */#define __list_for_each(pos, head)                              \    for (pos = (head)->next; pos != (head); pos = pos->next)/** * list_for_each_prev - iterate over a list backwards * @pos:    the &struct list_head to use as a loop cursor. * @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)/** * list_for_each_safe - iterate over a list safe against removal of list entry * @pos:    the &struct list_head to use as a loop cursor. * @n:      another &struct list_head to use as temporary storage * @head:   the head for your list. */#define list_for_each_safe(pos, n, head)                        \    for (pos = (head)->next, n = pos->next; pos != (head);      \         pos = n, n = pos->next)/** * list_for_each_backwards_safe    -    iterate backwards over a list safe *                                      against removal of list entry * @pos:    the &struct list_head to use as a loop counter. * @n:      another &struct list_head to use as temporary storage * @head:   the head for your list. */#define list_for_each_backwards_safe(pos, n, head)              \    for ( pos = (head)->prev, n = pos->prev; pos != (head);     \          pos = n, n = pos->prev )/** * list_for_each_entry - iterate over list of given type * @pos:    the type * to use as a loop cursor. * @head:   the head for your list. * @member: the name of the list_struct within the struct. */#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 = list_entry(pos->member.next, typeof(*pos), member))/** * list_for_each_entry_reverse - iterate backwards over list of given type. * @pos:    the type * to use as a loop cursor. * @head:   the head for your list. * @member: the name of the list_struct within the struct. */#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 = list_entry(pos->member.prev, typeof(*pos), member))/** * list_prepare_entry - prepare a pos entry for use in *                      list_for_each_entry_continue * @pos:    the type * to use as a start point * @head:   the head of the list * @member: the name of the list_struct within the struct. * * Prepares a pos entry for use as a start point in * list_for_each_entry_continue. */#define list_prepare_entry(pos, head, member)           \    ((pos) ? : list_entry(head, typeof(*pos), member))/** * list_for_each_entry_continue - continue iteration over list of given type * @pos:    the type * to use as a loop cursor. * @head:   the head for your list. * @member: the name of the list_struct within the struct. * * Continue to iterate over list of given type, continuing after * the current position. */#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 = list_entry(pos->member.next, typeof(*pos), member))/** * list_for_each_entry_from - iterate over list of given type from the *                            current point * @pos:    the type * to use as a loop cursor. * @head:   the head for your list. * @member: the name of the list_struct within the struct. * * 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);          \         pos = list_entry(pos->member.next, typeof(*pos), member))/** * list_for_each_entry_safe - iterate over list of given type safe *                            against removal of list entry * @pos:    the type * to use as a loop cursor. * @n:      another type * to use as temporary storage * @head:   the head for your list. * @member: the name of the list_struct within the struct. */#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:    the type * to use as a loop cursor. * @n:      another type * to use as temporary storage * @head:   the head for your list. * @member: the name of the list_struct within the struct. * * Iterate over list of given type, continuing after current point, * safe against removal of list entry. */#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))/** * list_for_each_entry_safe_from * @pos:    the type * to use as a loop cursor. * @n:      another type * to use as temporary storage * @head:   the head for your list. * @member: the name of the list_struct within the struct. * * Iterate over list of given type from current point, safe against * removal of list entry. */#define list_for_each_entry_safe_from(pos, n, head, member)             \    for (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_reverse * @pos:    the type * to use as a loop cursor. * @n:      another type * to use as temporary storage * @head:   the head for your list. * @member: the name of the list_struct within the struct. * * Iterate backwards over list of given type, safe against removal * of list entry. */#define list_for_each_entry_safe_reverse(pos, n, head, member)          \    for (pos = list_entry((head)->prev, typeof(*pos), member),          \         n = list_entry(pos->member.prev, typeof(*pos), member);        \         &pos->member != (head);                                        \         pos = n, n = list_entry(n->member.prev, typeof(*n), member))/** * list_for_each_rcu - iterate over an rcu-protected list * @pos:  the &struct list_head to use as a loop cursor. * @head: the head for your list. * * This list-traversal primitive may safely run concurrently with * the _rcu list-mutation primitives such as list_add_rcu() * as long as the traversal is guarded by rcu_read_lock(). */#define list_for_each_rcu(pos, head)                            \    for (pos = (head)->next;                                    \         prefetch(rcu_dereference(pos)->next), pos != (head);   \         pos = pos->next)#define __list_for_each_rcu(pos, head)          \    for (pos = (head)->next;                    \         rcu_dereference(pos) != (head);        \         pos = pos->next)/** * list_for_each_safe_rcu * @pos:   the &struct list_head to use as a loop cursor. * @n:     another &struct list_head to use as temporary storage * @head:  the head for your list. * * Iterate over an rcu-protected list, safe against removal of list entry. * * This list-traversal primitive may safely run concurrently with * the _rcu list-mutation primitives such as list_add_rcu() * as long as the traversal is guarded by rcu_read_lock(). */#define list_for_each_safe_rcu(pos, n, head)            \    for (pos = (head)->next;                            \         n = rcu_dereference(pos)->next, pos != (head); \         pos = n)/** * list_for_each_entry_rcu - iterate over rcu list of given type * @pos:    the type * to use as a loop cursor. * @head:   the head for your list. * @member: the name of the list_struct within the struct. * * This list-traversal primitive may safely run concurrently with * the _rcu list-mutation primitives such as list_add_rcu() * as long as the traversal is guarded by rcu_read_lock(). */#define list_for_each_entry_rcu(pos, head, member)                      \    for (pos = list_entry((head)->next, typeof(*pos), member);          \         prefetch(rcu_dereference(pos)->member.next),                   \         &pos->member != (head);                                        \         pos = list_entry(pos->member.next, typeof(*pos), member))/** * list_for_each_continue_rcu * @pos:    the &struct list_head to use as a loop cursor. * @head:   the head for your list. * * Iterate over an rcu-protected list, continuing after current point. * * This list-traversal primitive may safely run concurrently with * the _rcu list-mutation primitives such as list_add_rcu() * as long as the traversal is guarded by rcu_read_lock(). */#define list_for_each_continue_rcu(pos, head)                           \    for ((pos) = (pos)->next;                                           \         prefetch(rcu_dereference((pos))->next), (pos) != (head);       \         (pos) = (pos)->next)/*

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -