@sphinx.addnodesdocument)}( rawsourcechildren]( translations LanguagesNode)}(hhh](h pending_xref)}(hhh]docutils.nodesTextChinese (Simplified)}parenthsba attributes}(ids]classes]names]dupnames]backrefs] refdomainstdreftypedoc reftarget!/translations/zh_CN/core-api/listmodnameN classnameN refexplicitutagnamehhh ubh)}(hhh]hChinese (Traditional)}hh2sbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget!/translations/zh_TW/core-api/listmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hItalian}hhFsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget!/translations/it_IT/core-api/listmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hJapanese}hhZsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget!/translations/ja_JP/core-api/listmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hKorean}hhnsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget!/translations/ko_KR/core-api/listmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hPortuguese (Brazilian)}hhsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget!/translations/pt_BR/core-api/listmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hSpanish}hhsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget!/translations/sp_SP/core-api/listmodnameN classnameN refexplicituh1hhh ubeh}(h]h ]h"]h$]h&]current_languageEnglishuh1h hh _documenthsourceNlineNubhcomment)}(h!SPDX-License-Identifier: GPL-2.0+h]h!SPDX-License-Identifier: GPL-2.0+}hhsbah}(h]h ]h"]h$]h&] xml:spacepreserveuh1hhhhhh;/var/lib/git/docbuild/linux/Documentation/core-api/list.rsthKubhsection)}(hhh](htitle)}(hLinked Lists in Linuxh]hLinked Lists in Linux}(hhhhhNhNubah}(h]h ]h"]h$]h&]refidid1uh1hhhhhhhhKubh field_list)}(hhh]hfield)}(hhh](h field_name)}(hAuthorh]hAuthor}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhhhKubh field_body)}(h6Nicolas Frattaroli h]h paragraph)}(h5Nicolas Frattaroli h](hNicolas Frattaroli <}(hjhhhNhNubh reference)}(h nicolas.frattaroli@collabora.comh]h nicolas.frattaroli@collabora.com}(hj hhhNhNubah}(h]h ]h"]h$]h&]refuri'mailto:nicolas.frattaroli@collabora.comuh1j hjubh>}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhhubah}(h]h ]h"]h$]h&]uh1hhhubeh}(h]h ]h"]h$]h&]uh1hhhhKhhhhubah}(h]h ]h"]h$]h&]uh1hhhhhhhhKubhtopic)}(h Contents h](h)}(hContentsh]hContents}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj9hhhK ubh bullet_list)}(hhh]h list_item)}(hhh](j)}(hhh]j )}(hhh]hLinked Lists in Linux}(hjXhhhNhNubah}(h]hah ]h"]h$]h&]refidlinked-lists-in-linuxuh1j hjUubah}(h]h ]h"]h$]h&]uh1hhjRubjL)}(hhh](jQ)}(hhh]j)}(hhh]j )}(hhh]h Introduction}(hjvhhhNhNubah}(h]id2ah ]h"]h$]h&]refid introductionuh1j hjsubah}(h]h ]h"]h$]h&]uh1hhjpubah}(h]h ]h"]h$]h&]uh1jPhjmubjQ)}(hhh](j)}(hhh]j )}(hhh]h+Linux implementation of doubly linked lists}(hjhhhNhNubah}(h]id3ah ]h"]h$]h&]refid+linux-implementation-of-doubly-linked-listsuh1j hjubah}(h]h ]h"]h$]h&]uh1hhjubjL)}(hhh](jQ)}(hhh]j)}(hhh]j )}(hhh]hDeclaring a node}(hjhhhNhNubah}(h]id4ah ]h"]h$]h&]refiddeclaring-a-nodeuh1j hjubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1jPhjubjQ)}(hhh]j)}(hhh]j )}(hhh]h!Declaring and initializing a list}(hjhhhNhNubah}(h]id5ah ]h"]h$]h&]refid!declaring-and-initializing-a-listuh1j hjubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1jPhjubjQ)}(hhh]j)}(hhh]j )}(hhh]hAdding nodes to the list}(hjhhhNhNubah}(h]id6ah ]h"]h$]h&]refidadding-nodes-to-the-listuh1j hjubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1jPhjubjQ)}(hhh]j)}(hhh]j )}(hhh]hTraversing the list}(hjhhhNhNubah}(h]id7ah ]h"]h$]h&]refidtraversing-the-listuh1j hjubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1jPhjubjQ)}(hhh]j)}(hhh]j )}(hhh]hRemoving nodes from the list}(hj?hhhNhNubah}(h]id8ah ]h"]h$]h&]refidremoving-nodes-from-the-listuh1j hj<ubah}(h]h ]h"]h$]h&]uh1hhj9ubah}(h]h ]h"]h$]h&]uh1jPhjubjQ)}(hhh]j)}(hhh]j )}(hhh]h Traversing whilst removing nodes}(hjahhhNhNubah}(h]id9ah ]h"]h$]h&]refid traversing-whilst-removing-nodesuh1j hj^ubah}(h]h ]h"]h$]h&]uh1hhj[ubah}(h]h ]h"]h$]h&]uh1jPhjubjQ)}(hhh]j)}(hhh]j )}(hhh]hCutting a list}(hjhhhNhNubah}(h]id10ah ]h"]h$]h&]refidcutting-a-listuh1j hjubah}(h]h ]h"]h$]h&]uh1hhj}ubah}(h]h ]h"]h$]h&]uh1jPhjubjQ)}(hhh]j)}(hhh]j )}(hhh]h Moving entries and partial lists}(hjhhhNhNubah}(h]id11ah ]h"]h$]h&]refid moving-entries-and-partial-listsuh1j hjubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1jPhjubjQ)}(hhh]j)}(hhh]j )}(hhh]hRotating entries}(hjhhhNhNubah}(h]id12ah ]h"]h$]h&]refidrotating-entriesuh1j hjubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1jPhjubjQ)}(hhh]j)}(hhh]j )}(hhh]hSwapping entries}(hjhhhNhNubah}(h]id13ah ]h"]h$]h&]refidswapping-entriesuh1j hjubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1jPhjubjQ)}(hhh]j)}(hhh]j )}(hhh]hSplicing two lists together}(hj hhhNhNubah}(h]id14ah ]h"]h$]h&]refidsplicing-two-lists-togetheruh1j hjubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1jPhjubjQ)}(hhh]j)}(hhh]j )}(hhh]hConcurrency considerations}(hj-hhhNhNubah}(h]id15ah ]h"]h$]h&]refidconcurrency-considerationsuh1j hj*ubah}(h]h ]h"]h$]h&]uh1hhj'ubah}(h]h ]h"]h$]h&]uh1jPhjubjQ)}(hhh]j)}(hhh]j )}(hhh]hFurther reading}(hjOhhhNhNubah}(h]id16ah ]h"]h$]h&]refidfurther-readinguh1j hjLubah}(h]h ]h"]h$]h&]uh1hhjIubah}(h]h ]h"]h$]h&]uh1jPhjubeh}(h]h ]h"]h$]h&]uh1jKhjubeh}(h]h ]h"]h$]h&]uh1jPhjmubjQ)}(hhh]j)}(hhh]j )}(hhh]h Full List API}(hj}hhhNhNubah}(h]id17ah ]h"]h$]h&]refid full-list-apiuh1j hjzubah}(h]h ]h"]h$]h&]uh1hhjwubah}(h]h ]h"]h$]h&]uh1jPhjmubjQ)}(hhh]j)}(hhh]j )}(hhh]hPrivate List API}(hjhhhNhNubah}(h]id18ah ]h"]h$]h&]refidprivate-list-apiuh1j hjubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1jPhjmubeh}(h]h ]h"]h$]h&]uh1jKhjRubeh}(h]h ]h"]h$]h&]uh1jPhjMubah}(h]h ]h"]h$]h&]uh1jKhj9hhhNhNubeh}(h]contentsah ]contentsah"]contentsah$]h&]uh1j7hhhK hhhhubh)}(hhh](h)}(h Introductionh]h Introduction}(hjhhhNhNubah}(h]h ]h"]h$]h&]hjuh1hhjhhhhhK ubj)}(hX<Linked lists are one of the most basic data structures used in many programs. The Linux kernel implements several different flavours of linked lists. The purpose of this document is not to explain linked lists in general, but to show new kernel developers how to use the Linux kernel implementations of linked lists.h]hX<Linked lists are one of the most basic data structures used in many programs. The Linux kernel implements several different flavours of linked lists. The purpose of this document is not to explain linked lists in general, but to show new kernel developers how to use the Linux kernel implementations of linked lists.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubj)}(hXPlease note that while linked lists certainly are ubiquitous, they are rarely the best data structure to use in cases where a simple array doesn't already suffice. In particular, due to their poor data locality, linked lists are a bad choice in situations where performance may be of consideration. Familiarizing oneself with other in-kernel generic data structures, especially for concurrent accesses, is highly encouraged.h]hXPlease note that while linked lists certainly are ubiquitous, they are rarely the best data structure to use in cases where a simple array doesn’t already suffice. In particular, due to their poor data locality, linked lists are a bad choice in situations where performance may be of consideration. Familiarizing oneself with other in-kernel generic data structures, especially for concurrent accesses, is highly encouraged.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubeh}(h]jah ]h"] introductionah$]h&]uh1hhhhhhhhK ubh)}(hhh](h)}(h+Linux implementation of doubly linked listsh]h+Linux implementation of doubly linked lists}(hj hhhNhNubah}(h]h ]h"]h$]h&]hjuh1hhj hhhhhKubj)}(h`Linux's linked list implementations can be used by including the header file ````.h](hOLinux’s linked list implementations can be used by including the header file }(hjhhhNhNubhliteral)}(h````h]h}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1j#hjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhj hhubj)}(hThe doubly-linked list will likely be the most familiar to many readers. It's a list that can efficiently be traversed forwards and backwards.h]hThe doubly-linked list will likely be the most familiar to many readers. It’s a list that can efficiently be traversed forwards and backwards.}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK!hj hhubj)}(hXThe Linux kernel's doubly-linked list is circular in nature. This means that to get from the head node to the tail, we can just travel one edge backwards. Similarly, to get from the tail node to the head, we can simply travel forwards "beyond" the tail and arrive back at the head.h]hXThe Linux kernel’s doubly-linked list is circular in nature. This means that to get from the head node to the tail, we can just travel one edge backwards. Similarly, to get from the tail node to the head, we can simply travel forwards “beyond” the tail and arrive back at the head.}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK$hj hhubh)}(hhh](h)}(hDeclaring a nodeh]hDeclaring a node}(hj\hhhNhNubah}(h]h ]h"]h$]h&]hjuh1hhjYhhhhhK*ubj)}(hA node in a doubly-linked list is declared by adding a struct list_head member to the data structure you wish to be contained in the list:h]hA node in a doubly-linked list is declared by adding a struct list_head member to the data structure you wish to be contained in the list:}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK,hjYhhubh literal_block)}(hstruct clown { unsigned long long shoe_size; const char *name; struct list_head node; /* the aforementioned member */ };h]hstruct clown { unsigned long long shoe_size; const char *name; struct list_head node; /* the aforementioned member */ };}hjzsbah}(h]h ]h"]h$]h&]hhƌforcelanguagechighlight_args}uh1jxhhhK/hjYhhubj)}(hXZThis may be an unfamiliar approach to some, as the classical explanation of a linked list is a list node data structure with pointers to the previous and next list node, as well the payload data. Linux chooses this approach because it allows for generic list modification code regardless of what data structure is contained within the list. Since the struct list_head member is not a pointer but part of the data structure proper, the container_of() pattern can be used by the list implementation to access the payload data regardless of its type, while staying oblivious to what said type actually is.h]hXZThis may be an unfamiliar approach to some, as the classical explanation of a linked list is a list node data structure with pointers to the previous and next list node, as well the payload data. Linux chooses this approach because it allows for generic list modification code regardless of what data structure is contained within the list. Since the struct list_head member is not a pointer but part of the data structure proper, the container_of() pattern can be used by the list implementation to access the payload data regardless of its type, while staying oblivious to what said type actually is.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK7hjYhhubeh}(h]jah ]h"]declaring a nodeah$]h&]uh1hhj hhhhhK*ubh)}(hhh](h)}(h!Declaring and initializing a listh]h!Declaring and initializing a list}(hjhhhNhNubah}(h]h ]h"]h$]h&]hjuh1hhjhhhhhKAubj)}(hA doubly-linked list can then be declared as just another struct list_head, and initialized with the LIST_HEAD_INIT() macro during initial assignment, or with the INIT_LIST_HEAD() function later:h]hA doubly-linked list can then be declared as just another struct list_head, and initialized with the LIST_HEAD_INIT() macro during initial assignment, or with the INIT_LIST_HEAD() function later:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKChjhhubjy)}(hXstruct clown_car { int tyre_pressure[4]; struct list_head clowns; /* Looks like a node! */ }; /* ... Somewhere later in our driver ... */ static int circus_init(struct circus_priv *circus) { struct clown_car other_car = { .tyre_pressure = {10, 12, 11, 9}, .clowns = LIST_HEAD_INIT(other_car.clowns) }; INIT_LIST_HEAD(&circus->car.clowns); return 0; }h]hXstruct clown_car { int tyre_pressure[4]; struct list_head clowns; /* Looks like a node! */ }; /* ... Somewhere later in our driver ... */ static int circus_init(struct circus_priv *circus) { struct clown_car other_car = { .tyre_pressure = {10, 12, 11, 9}, .clowns = LIST_HEAD_INIT(other_car.clowns) }; INIT_LIST_HEAD(&circus->car.clowns); return 0; }}hjsbah}(h]h ]h"]h$]h&]hhjjjj}uh1jxhhhKGhjhhubj)}(hA further point of confusion to some may be that the list itself doesn't really have its own type. The concept of the entire linked list and a struct list_head member that points to other entries in the list are one and the same.h]hA further point of confusion to some may be that the list itself doesn’t really have its own type. The concept of the entire linked list and a struct list_head member that points to other entries in the list are one and the same.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK\hjhhubeh}(h]jah ]h"]!declaring and initializing a listah$]h&]uh1hhj hhhhhKAubh)}(hhh](h)}(hAdding nodes to the listh]hAdding nodes to the list}(hjhhhNhNubah}(h]h ]h"]h$]h&]hjuh1hhjhhhhhKbubj)}(hFAdding a node to the linked list is done through the list_add() macro.h]hFAdding a node to the linked list is done through the list_add() macro.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKdhjhhubj)}(hTWe'll return to our clown car example to illustrate how nodes get added to the list:h]hVWe’ll return to our clown car example to illustrate how nodes get added to the list:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKfhjhhubjy)}(hXstatic int circus_fill_car(struct circus_priv *circus) { struct clown_car *car = &circus->car; struct clown *grock; struct clown *dimitri; /* State 1 */ grock = kzalloc(sizeof(*grock), GFP_KERNEL); if (!grock) return -ENOMEM; grock->name = "Grock"; grock->shoe_size = 1000; /* Note that we're adding the "node" member */ list_add(&grock->node, &car->clowns); /* State 2 */ dimitri = kzalloc(sizeof(*dimitri), GFP_KERNEL); if (!dimitri) return -ENOMEM; dimitri->name = "Dimitri"; dimitri->shoe_size = 50; list_add(&dimitri->node, &car->clowns); /* State 3 */ return 0; }h]hXstatic int circus_fill_car(struct circus_priv *circus) { struct clown_car *car = &circus->car; struct clown *grock; struct clown *dimitri; /* State 1 */ grock = kzalloc(sizeof(*grock), GFP_KERNEL); if (!grock) return -ENOMEM; grock->name = "Grock"; grock->shoe_size = 1000; /* Note that we're adding the "node" member */ list_add(&grock->node, &car->clowns); /* State 2 */ dimitri = kzalloc(sizeof(*dimitri), GFP_KERNEL); if (!dimitri) return -ENOMEM; dimitri->name = "Dimitri"; dimitri->shoe_size = 50; list_add(&dimitri->node, &car->clowns); /* State 3 */ return 0; }}hjsbah}(h]h ]h"]h$]h&]hhjjjj}uh1jxhhhKihjhhubj)}(h/In State 1, our list of clowns is still empty::h]h.In State 1, our list of clowns is still empty:}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubjy)}(hB .------. v | .--------. | | clowns |--' '--------'h]hB .------. v | .--------. | | clowns |--' '--------'}hj/sbah}(h]h ]h"]h$]h&]hhuh1jxhhhKhjhhubj)}(hThis diagram shows the singular "clowns" node pointing at itself. In this diagram, and all following diagrams, only the forward edges are shown, to aid in clarity.h]hThis diagram shows the singular “clowns” node pointing at itself. In this diagram, and all following diagrams, only the forward edges are shown, to aid in clarity.}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubj)}(h3In State 2, we've added Grock after the list head::h]h4In State 2, we’ve added Grock after the list head:}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubjy)}(h .--------------------. v | .--------. .-------. | | clowns |---->| Grock |--' '--------' '-------'h]h .--------------------. v | .--------. .-------. | | clowns |---->| Grock |--' '--------' '-------'}hjYsbah}(h]h ]h"]h$]h&]hhuh1jxhhhKhjhhubj)}(hThis diagram shows the "clowns" node pointing at a new node labeled "Grock". The Grock node is pointing back at the "clowns" node.h]hThis diagram shows the “clowns” node pointing at a new node labeled “Grock”. The Grock node is pointing back at the “clowns” node.}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubj)}(hQIn State 3, we've added Dimitri after the list head, resulting in the following::h]hRIn State 3, we’ve added Dimitri after the list head, resulting in the following:}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubjy)}(h .------------------------------------. v | .--------. .---------. .-------. | | clowns |---->| Dimitri |---->| Grock |--' '--------' '---------' '-------'h]h .------------------------------------. v | .--------. .---------. .-------. | | clowns |---->| Dimitri |---->| Grock |--' '--------' '---------' '-------'}hjsbah}(h]h ]h"]h$]h&]hhuh1jxhhhKhjhhubj)}(hThis diagram shows the "clowns" node pointing at a new node labeled "Dimitri", which then points at the node labeled "Grock". The "Grock" node still points back at the "clowns" node.h]hThis diagram shows the “clowns” node pointing at a new node labeled “Dimitri”, which then points at the node labeled “Grock”. The “Grock” node still points back at the “clowns” node.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubj)}(hIf we wanted to have Dimitri inserted at the end of the list instead, we'd use list_add_tail(). Our code would then look like this:h]hIf we wanted to have Dimitri inserted at the end of the list instead, we’d use list_add_tail(). Our code would then look like this:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubjy)}(hstatic int circus_fill_car(struct circus_priv *circus) { /* ... */ list_add_tail(&dimitri->node, &car->clowns); /* State 3b */ return 0; }h]hstatic int circus_fill_car(struct circus_priv *circus) { /* ... */ list_add_tail(&dimitri->node, &car->clowns); /* State 3b */ return 0; }}hjsbah}(h]h ]h"]h$]h&]hhjjjj}uh1jxhhhKhjhhubj)}(h$This results in the following list::h]h#This results in the following list:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubjy)}(h .------------------------------------. v | .--------. .-------. .---------. | | clowns |---->| Grock |---->| Dimitri |--' '--------' '-------' '---------'h]h .------------------------------------. v | .--------. .-------. .---------. | | clowns |---->| Grock |---->| Dimitri |--' '--------' '-------' '---------'}hjsbah}(h]h ]h"]h$]h&]hhuh1jxhhhKhjhhubj)}(hThis diagram shows the "clowns" node pointing at the node labeled "Grock", which points at the new node labeled "Dimitri". The node labeled "Dimitri" points back at the "clowns" node.h]hThis diagram shows the “clowns” node pointing at the node labeled “Grock”, which points at the new node labeled “Dimitri”. The node labeled “Dimitri” points back at the “clowns” node.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubeh}(h]j ah ]h"]adding nodes to the listah$]h&]uh1hhj hhhhhKbubh)}(hhh](h)}(hTraversing the listh]hTraversing the list}(hjhhhNhNubah}(h]h ]h"]h$]h&]hj&uh1hhjhhhhhKubj)}(hXTo iterate the list, we can loop through all nodes within the list with list_for_each().h]hXTo iterate the list, we can loop through all nodes within the list with list_for_each().}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubj)}(hJIn our clown example, this results in the following somewhat awkward code:h]hJIn our clown example, this results in the following somewhat awkward code:}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubjy)}(hXstatic unsigned long long circus_get_max_shoe_size(struct circus_priv *circus) { unsigned long long res = 0; struct clown *e; struct list_head *cur; list_for_each(cur, &circus->car.clowns) { e = list_entry(cur, struct clown, node); if (e->shoe_size > res) res = e->shoe_size; } return res; }h]hXstatic unsigned long long circus_get_max_shoe_size(struct circus_priv *circus) { unsigned long long res = 0; struct clown *e; struct list_head *cur; list_for_each(cur, &circus->car.clowns) { e = list_entry(cur, struct clown, node); if (e->shoe_size > res) res = e->shoe_size; } return res; }}hjsbah}(h]h ]h"]h$]h&]hhjjjj}uh1jxhhhKhjhhubj)}(hThe list_entry() macro internally uses the aforementioned container_of() to retrieve the data structure instance that ``node`` is a member of.h](hvThe list_entry() macro internally uses the aforementioned container_of() to retrieve the data structure instance that }(hj)hhhNhNubj$)}(h``node``h]hnode}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1j#hj)ubh is a member of.}(hj)hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjhhubj)}(hXBNote how the additional list_entry() call is a little awkward here. It's only there because we're iterating through the ``node`` members, but we really want to iterate through the payload, i.e. the ``struct clown`` that contains each node's struct list_head. For this reason, there is a second macro: list_for_each_entry()h](h|Note how the additional list_entry() call is a little awkward here. It’s only there because we’re iterating through the }(hjIhhhNhNubj$)}(h``node``h]hnode}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1j#hjIubhF members, but we really want to iterate through the payload, i.e. the }(hjIhhhNhNubj$)}(h``struct clown``h]h struct clown}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1j#hjIubhn that contains each node’s struct list_head. For this reason, there is a second macro: list_for_each_entry()}(hjIhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjhhubj)}(h6Using it would change our code to something like this:h]h6Using it would change our code to something like this:}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubjy)}(hX?static unsigned long long circus_get_max_shoe_size(struct circus_priv *circus) { unsigned long long res = 0; struct clown *e; list_for_each_entry(e, &circus->car.clowns, node) { if (e->shoe_size > res) res = e->shoe_size; } return res; }h]hX?static unsigned long long circus_get_max_shoe_size(struct circus_priv *circus) { unsigned long long res = 0; struct clown *e; list_for_each_entry(e, &circus->car.clowns, node) { if (e->shoe_size > res) res = e->shoe_size; } return res; }}hjsbah}(h]h ]h"]h$]h&]hhjjjj}uh1jxhhhKhjhhubj)}(hXThis eliminates the need for the list_entry() step, and our loop cursor is now of the type of our payload. The macro is given the member name that corresponds to the list's struct list_head within the clown data structure so that it can still walk the list.h]hXThis eliminates the need for the list_entry() step, and our loop cursor is now of the type of our payload. The macro is given the member name that corresponds to the list’s struct list_head within the clown data structure so that it can still walk the list.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubeh}(h]j,ah ]h"]traversing the listah$]h&]uh1hhj hhhhhKubh)}(hhh](h)}(hRemoving nodes from the listh]hRemoving nodes from the list}(hjhhhNhNubah}(h]h ]h"]h$]h&]hjHuh1hhjhhhhhMubj)}(hThe list_del() function can be used to remove entries from the list. It not only removes the given entry from the list, but poisons the entry's ``prev`` and ``next`` pointers, so that unintended use of the entry after removal does not go unnoticed.h](hThe list_del() function can be used to remove entries from the list. It not only removes the given entry from the list, but poisons the entry’s }(hjhhhNhNubj$)}(h``prev``h]hprev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j#hjubh and }(hjhhhNhNubj$)}(h``next``h]hnext}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j#hjubhS pointers, so that unintended use of the entry after removal does not go unnoticed.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhjhhubj)}(h@We can extend our previous example to remove one of the entries:h]h@We can extend our previous example to remove one of the entries:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM hjhhubjy)}(hstatic int circus_fill_car(struct circus_priv *circus) { /* ... */ list_add(&dimitri->node, &car->clowns); /* State 3 */ list_del(&dimitri->node); /* State 4 */ return 0; }h]hstatic int circus_fill_car(struct circus_priv *circus) { /* ... */ list_add(&dimitri->node, &car->clowns); /* State 3 */ list_del(&dimitri->node); /* State 4 */ return 0; }}hjsbah}(h]h ]h"]h$]h&]hhjjjj}uh1jxhhhM hjhhubj)}(h"The result of this would be this::h]h!The result of this would be this:}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjhhubjy)}(h .--------------------. v | .--------. .-------. | .---------. | clowns |---->| Grock |--' | Dimitri | '--------' '-------' '---------'h]h .--------------------. v | .--------. .-------. | .---------. | clowns |---->| Grock |--' | Dimitri | '--------' '-------' '---------'}hjsbah}(h]h ]h"]h$]h&]hhuh1jxhhhMhjhhubj)}(hThis diagram shows the "clowns" node pointing at the node labeled "Grock", which points back at the "clowns" node. Off to the side is a lone node labeled "Dimitri", which has no arrows pointing anywhere.h]hThis diagram shows the “clowns” node pointing at the node labeled “Grock”, which points back at the “clowns” node. Off to the side is a lone node labeled “Dimitri”, which has no arrows pointing anywhere.}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM%hjhhubj)}(hNote how the Dimitri node does not point to itself; its pointers are intentionally set to a "poison" value that the list code refuses to traverse.h]hNote how the Dimitri node does not point to itself; its pointers are intentionally set to a “poison” value that the list code refuses to traverse.}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM)hjhhubj)}(hIf we wanted to reinitialize the removed node instead to make it point at itself again like an empty list head, we can use list_del_init() instead:h]hIf we wanted to reinitialize the removed node instead to make it point at itself again like an empty list head, we can use list_del_init() instead:}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM,hjhhubjy)}(hstatic int circus_fill_car(struct circus_priv *circus) { /* ... */ list_add(&dimitri->node, &car->clowns); /* State 3 */ list_del_init(&dimitri->node); /* State 4b */ return 0; }h]hstatic int circus_fill_car(struct circus_priv *circus) { /* ... */ list_add(&dimitri->node, &car->clowns); /* State 3 */ list_del_init(&dimitri->node); /* State 4b */ return 0; }}hjSsbah}(h]h ]h"]h$]h&]hhjjjj}uh1jxhhhM/hjhhubj)}(h;This results in the deleted node pointing to itself again::h]h:This results in the deleted node pointing to itself again:}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM@hjhhubjy)}(h .--------------------. .-------. v | v | .--------. .-------. | .---------. | | clowns |---->| Grock |--' | Dimitri |--' '--------' '-------' '---------'h]h .--------------------. .-------. v | v | .--------. .-------. | .---------. | | clowns |---->| Grock |--' | Dimitri |--' '--------' '-------' '---------'}hjpsbah}(h]h ]h"]h$]h&]hhuh1jxhhhMBhjhhubj)}(hThis diagram shows the "clowns" node pointing at the node labeled "Grock", which points back at the "clowns" node. Off to the side is a lone node labeled "Dimitri", which points to itself.h]hThis diagram shows the “clowns” node pointing at the node labeled “Grock”, which points back at the “clowns” node. Off to the side is a lone node labeled “Dimitri”, which points to itself.}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMHhjhhubeh}(h]jNah ]h"]removing nodes from the listah$]h&]uh1hhj hhhhhMubh)}(hhh](h)}(h Traversing whilst removing nodesh]h Traversing whilst removing nodes}(hjhhhNhNubah}(h]h ]h"]h$]h&]hjjuh1hhjhhhhhMMubj)}(hX Deleting entries while we're traversing the list will cause problems if we use list_for_each() and list_for_each_entry(), as deleting the current entry would modify the ``next`` pointer of it, which means the traversal can't properly advance to the next list entry.h](hDeleting entries while we’re traversing the list will cause problems if we use list_for_each() and list_for_each_entry(), as deleting the current entry would modify the }(hjhhhNhNubj$)}(h``next``h]hnext}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j#hjubhZ pointer of it, which means the traversal can’t properly advance to the next list entry.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMOhjhhubj)}(hThere is a solution to this however: list_for_each_safe() and list_for_each_entry_safe(). These take an additional parameter of a pointer to a struct list_head to use as temporary storage for the next entry during iteration, solving the issue.h]hThere is a solution to this however: list_for_each_safe() and list_for_each_entry_safe(). These take an additional parameter of a pointer to a struct list_head to use as temporary storage for the next entry during iteration, solving the issue.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMThjhhubj)}(hAn example of how to use it:h]hAn example of how to use it:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMYhjhhubjy)}(hXMstatic void circus_eject_insufficient_clowns(struct circus_priv *circus) { struct clown *e; struct clown *n; /* temporary storage for safe iteration */ list_for_each_entry_safe(e, n, &circus->car.clowns, node) { if (e->shoe_size < 500) list_del(&e->node); } }h]hXMstatic void circus_eject_insufficient_clowns(struct circus_priv *circus) { struct clown *e; struct clown *n; /* temporary storage for safe iteration */ list_for_each_entry_safe(e, n, &circus->car.clowns, node) { if (e->shoe_size < 500) list_del(&e->node); } }}hjsbah}(h]h ]h"]h$]h&]hhjjjj}uh1jxhhhM[hjhhubj)}(hProper memory management (i.e. freeing the deleted node while making sure nothing still references it) in this case is left as an exercise to the reader.h]hProper memory management (i.e. freeing the deleted node while making sure nothing still references it) in this case is left as an exercise to the reader.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhhjhhubeh}(h]jpah ]h"] traversing whilst removing nodesah$]h&]uh1hhj hhhhhMMubh)}(hhh](h)}(hCutting a listh]hCutting a list}(hjhhhNhNubah}(h]h ]h"]h$]h&]hjuh1hhjhhhhhMlubj)}(hThere are two helper functions to cut lists with. Both take elements from the list ``head``, and replace the contents of the list ``list``.h](hSThere are two helper functions to cut lists with. Both take elements from the list }(hjhhhNhNubj$)}(h``head``h]hhead}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j#hjubh', and replace the contents of the list }(hjhhhNhNubj$)}(h``list``h]hlist}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1j#hjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMnhjhhubj)}(hThe first such function is list_cut_position(). It removes all list entries from ``head`` up to and including ``entry``, placing them in ``list`` instead.h](hQThe first such function is list_cut_position(). It removes all list entries from }(hjGhhhNhNubj$)}(h``head``h]hhead}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1j#hjGubh up to and including }(hjGhhhNhNubj$)}(h ``entry``h]hentry}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1j#hjGubh, placing them in }(hjGhhhNhNubj$)}(h``list``h]hlist}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1j#hjGubh instead.}(hjGhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMqhjhhubj)}(h@In this example, it's assumed we start with the following list::h]hAIn this example, it’s assumed we start with the following list:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMthjhhubjy)}(hXd .----------------------------------------------------------------. v | .--------. .-------. .---------. .-----. .---------. | | clowns |---->| Grock |---->| Dimitri |---->| Pic |---->| Alfredo |--' '--------' '-------' '---------' '-----' '---------'h]hXd .----------------------------------------------------------------. v | .--------. .-------. .---------. .-----. .---------. | | clowns |---->| Grock |---->| Dimitri |---->| Pic |---->| Alfredo |--' '--------' '-------' '---------' '-----' '---------'}hjsbah}(h]h ]h"]h$]h&]hhuh1jxhhhMvhjhhubj)}(hWith the following code, every clown up to and including "Pic" is moved from the "clowns" list head to a separate struct list_head initialized at local stack variable ``retirement``:h](hWith the following code, every clown up to and including “Pic” is moved from the “clowns” list head to a separate struct list_head initialized at local stack variable }(hjhhhNhNubj$)}(h``retirement``h]h retirement}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j#hjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhM|hjhhubjy)}(hXzstatic void circus_retire_clowns(struct circus_priv *circus) { struct list_head retirement = LIST_HEAD_INIT(retirement); struct clown *grock, *dimitri, *pic, *alfredo; struct clown_car *car = &circus->car; /* ... clown initialization, list adding ... */ list_cut_position(&retirement, &car->clowns, &pic->node); /* State 1 */ }h]hXzstatic void circus_retire_clowns(struct circus_priv *circus) { struct list_head retirement = LIST_HEAD_INIT(retirement); struct clown *grock, *dimitri, *pic, *alfredo; struct clown_car *car = &circus->car; /* ... clown initialization, list adding ... */ list_cut_position(&retirement, &car->clowns, &pic->node); /* State 1 */ }}hjsbah}(h]h ]h"]h$]h&]hhjjjj}uh1jxhhhMhjhhubj)}(h2The resulting ``car->clowns`` list would be this::h](hThe resulting }(hjhhhNhNubj$)}(h``car->clowns``h]h car->clowns}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j#hjubh list would be this:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhjhhubjy)}(h .----------------------. v | .--------. .---------. | | clowns |---->| Alfredo |--' '--------' '---------'h]h .----------------------. v | .--------. .---------. | | clowns |---->| Alfredo |--' '--------' '---------'}hjsbah}(h]h ]h"]h$]h&]hhuh1jxhhhMhjhhubj)}(hDMeanwhile, the ``retirement`` list is transformed to the following::h](hMeanwhile, the }(hj hhhNhNubj$)}(h``retirement``h]h retirement}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j#hj ubh& list is transformed to the following:}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhjhhubjy)}(hX( .--------------------------------------------------. v | .------------. .-------. .---------. .-----. | | retirement |---->| Grock |---->| Dimitri |---->| Pic |--' '------------' '-------' '---------' '-----'h]hX( .--------------------------------------------------. v | .------------. .-------. .---------. .-----. | | retirement |---->| Grock |---->| Dimitri |---->| Pic |--' '------------' '-------' '---------' '-----'}hj$ sbah}(h]h ]h"]h$]h&]hhuh1jxhhhMhjhhubj)}(hX The second function, list_cut_before(), is much the same, except it cuts before the ``entry`` node, i.e. it removes all list entries from ``head`` up to but excluding ``entry``, placing them in ``list`` instead. This example assumes the same initial starting list as the previous example:h](hTThe second function, list_cut_before(), is much the same, except it cuts before the }(hj2 hhhNhNubj$)}(h ``entry``h]hentry}(hj: hhhNhNubah}(h]h ]h"]h$]h&]uh1j#hj2 ubh- node, i.e. it removes all list entries from }(hj2 hhhNhNubj$)}(h``head``h]hhead}(hjL hhhNhNubah}(h]h ]h"]h$]h&]uh1j#hj2 ubh up to but excluding }(hj2 hhhNhNubj$)}(h ``entry``h]hentry}(hj^ hhhNhNubah}(h]h ]h"]h$]h&]uh1j#hj2 ubh, placing them in }(hj2 hhhNhNubj$)}(h``list``h]hlist}(hjp hhhNhNubah}(h]h ]h"]h$]h&]uh1j#hj2 ubhV instead. This example assumes the same initial starting list as the previous example:}(hj2 hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhjhhubjy)}(hXystatic void circus_retire_clowns(struct circus_priv *circus) { struct list_head retirement = LIST_HEAD_INIT(retirement); struct clown *grock, *dimitri, *pic, *alfredo; struct clown_car *car = &circus->car; /* ... clown initialization, list adding ... */ list_cut_before(&retirement, &car->clowns, &pic->node); /* State 1b */ }h]hXystatic void circus_retire_clowns(struct circus_priv *circus) { struct list_head retirement = LIST_HEAD_INIT(retirement); struct clown *grock, *dimitri, *pic, *alfredo; struct clown_car *car = &circus->car; /* ... clown initialization, list adding ... */ list_cut_before(&retirement, &car->clowns, &pic->node); /* State 1b */ }}hj sbah}(h]h ]h"]h$]h&]hhjjjj}uh1jxhhhMhjhhubj)}(h2The resulting ``car->clowns`` list would be this::h](hThe resulting }(hj hhhNhNubj$)}(h``car->clowns``h]h car->clowns}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j#hj ubh list would be this:}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhjhhubjy)}(h .----------------------------------. v | .--------. .-----. .---------. | | clowns |---->| Pic |---->| Alfredo |--' '--------' '-----' '---------'h]h .----------------------------------. v | .--------. .-----. .---------. | | clowns |---->| Pic |---->| Alfredo |--' '--------' '-----' '---------'}hj sbah}(h]h ]h"]h$]h&]hhuh1jxhhhMhjhhubj)}(hDMeanwhile, the ``retirement`` list is transformed to the following::h](hMeanwhile, the }(hj hhhNhNubj$)}(h``retirement``h]h retirement}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j#hj ubh& list is transformed to the following:}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhjhhubjy)}(h .--------------------------------------. v | .------------. .-------. .---------. | | retirement |---->| Grock |---->| Dimitri |--' '------------' '-------' '---------'h]h .--------------------------------------. v | .------------. .-------. .---------. | | retirement |---->| Grock |---->| Dimitri |--' '------------' '-------' '---------'}hj sbah}(h]h ]h"]h$]h&]hhuh1jxhhhMhjhhubj)}(h~It should be noted that both functions will destroy links to any existing nodes in the destination ``struct list_head *list``.h](hcIt should be noted that both functions will destroy links to any existing nodes in the destination }(hj hhhNhNubj$)}(h``struct list_head *list``h]hstruct list_head *list}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j#hj ubh.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhjhhubeh}(h]jah ]h"]cutting a listah$]h&]uh1hhj hhhhhMlubh)}(hhh](h)}(h Moving entries and partial listsh]h Moving entries and partial lists}(hj hhhNhNubah}(h]h ]h"]h$]h&]hjuh1hhj hhhhhMubj)}(hThe list_move() and list_move_tail() functions can be used to move an entry from one list to another, to either the start or end respectively.h]hThe list_move() and list_move_tail() functions can be used to move an entry from one list to another, to either the start or end respectively.}(hj+ hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj hhubj)}(hIn the following example, we'll assume we start with two lists ("clowns" and "sidewalk" in the following initial state "State 0"::h]hIn the following example, we’ll assume we start with two lists (“clowns” and “sidewalk” in the following initial state “State 0”:}(hj9 hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj hhubjy)}(hX .----------------------------------------------------------------. v | .--------. .-------. .---------. .-----. .---------. | | clowns |---->| Grock |---->| Dimitri |---->| Pic |---->| Alfredo |--' '--------' '-------' '---------' '-----' '---------' .-------------------. v | .----------. .-----. | | sidewalk |---->| Pio |--' '----------' '-----'h]hX .----------------------------------------------------------------. v | .--------. .-------. .---------. .-----. .---------. | | clowns |---->| Grock |---->| Dimitri |---->| Pic |---->| Alfredo |--' '--------' '-------' '---------' '-----' '---------' .-------------------. v | .----------. .-----. | | sidewalk |---->| Pio |--' '----------' '-----'}hjG sbah}(h]h ]h"]h$]h&]hhuh1jxhhhMhj hhubj)}(h5We apply the following example code to the two lists:h]h5We apply the following example code to the two lists:}(hjU hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj hhubjy)}(hXstatic void circus_clowns_exit_car(struct circus_priv *circus) { struct list_head sidewalk = LIST_HEAD_INIT(sidewalk); struct clown *grock, *dimitri, *pic, *alfredo, *pio; struct clown_car *car = &circus->car; /* ... clown initialization, list adding ... */ /* State 0 */ list_move(&pic->node, &sidewalk); /* State 1 */ list_move_tail(&dimitri->node, &sidewalk); /* State 2 */ }h]hXstatic void circus_clowns_exit_car(struct circus_priv *circus) { struct list_head sidewalk = LIST_HEAD_INIT(sidewalk); struct clown *grock, *dimitri, *pic, *alfredo, *pio; struct clown_car *car = &circus->car; /* ... clown initialization, list adding ... */ /* State 0 */ list_move(&pic->node, &sidewalk); /* State 1 */ list_move_tail(&dimitri->node, &sidewalk); /* State 2 */ }}hjc sbah}(h]h ]h"]h$]h&]hhjjjj}uh1jxhhhMhj hhubj)}(h2In State 1, we arrive at the following situation::h]h1In State 1, we arrive at the following situation:}(hjr hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj hhubjy)}(hX* .-----------------------------------------------------. | | v | .--------. .-------. .---------. .---------. | | clowns |---->| Grock |---->| Dimitri |---->| Alfredo |--' '--------' '-------' '---------' '---------' .-------------------------------. v | .----------. .-----. .-----. | | sidewalk |---->| Pic |---->| Pio |--' '----------' '-----' '-----'h]hX* .-----------------------------------------------------. | | v | .--------. .-------. .---------. .---------. | | clowns |---->| Grock |---->| Dimitri |---->| Alfredo |--' '--------' '-------' '---------' '---------' .-------------------------------. v | .----------. .-----. .-----. | | sidewalk |---->| Pic |---->| Pio |--' '----------' '-----' '-----'}hj sbah}(h]h ]h"]h$]h&]hhuh1jxhhhMhj hhubj)}(haIn State 2, after we've moved Dimitri to the tail of sidewalk, the situation changes as follows::h]hbIn State 2, after we’ve moved Dimitri to the tail of sidewalk, the situation changes as follows:}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj hhubjy)}(hX .-------------------------------------. | | v | .--------. .-------. .---------. | | clowns |---->| Grock |---->| Alfredo |--' '--------' '-------' '---------' .-----------------------------------------------. v | .----------. .-----. .-----. .---------. | | sidewalk |---->| Pic |---->| Pio |---->| Dimitri |--' '----------' '-----' '-----' '---------'h]hX .-------------------------------------. | | v | .--------. .-------. .---------. | | clowns |---->| Grock |---->| Alfredo |--' '--------' '-------' '---------' .-----------------------------------------------. v | .----------. .-----. .-----. .---------. | | sidewalk |---->| Pic |---->| Pio |---->| Dimitri |--' '----------' '-----' '-----' '---------'}hj sbah}(h]h ]h"]h$]h&]hhuh1jxhhhMhj hhubj)}(hX*As long as the source and destination list head are part of the same list, we can also efficiently bulk move a segment of the list to the tail end of the list. We continue the previous example by adding a list_bulk_move_tail() after State 2, moving Pic and Pio to the tail end of the sidewalk list.h]hX*As long as the source and destination list head are part of the same list, we can also efficiently bulk move a segment of the list to the tail end of the list. We continue the previous example by adding a list_bulk_move_tail() after State 2, moving Pic and Pio to the tail end of the sidewalk list.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj hhubjy)}(hX static void circus_clowns_exit_car(struct circus_priv *circus) { struct list_head sidewalk = LIST_HEAD_INIT(sidewalk); struct clown *grock, *dimitri, *pic, *alfredo, *pio; struct clown_car *car = &circus->car; /* ... clown initialization, list adding ... */ /* State 0 */ list_move(&pic->node, &sidewalk); /* State 1 */ list_move_tail(&dimitri->node, &sidewalk); /* State 2 */ list_bulk_move_tail(&sidewalk, &pic->node, &pio->node); /* State 3 */ }h]hX static void circus_clowns_exit_car(struct circus_priv *circus) { struct list_head sidewalk = LIST_HEAD_INIT(sidewalk); struct clown *grock, *dimitri, *pic, *alfredo, *pio; struct clown_car *car = &circus->car; /* ... clown initialization, list adding ... */ /* State 0 */ list_move(&pic->node, &sidewalk); /* State 1 */ list_move_tail(&dimitri->node, &sidewalk); /* State 2 */ list_bulk_move_tail(&sidewalk, &pic->node, &pio->node); /* State 3 */ }}hj sbah}(h]h ]h"]h$]h&]hhjjjj}uh1jxhhhMhj hhubj)}(hkFor the sake of brevity, only the altered "sidewalk" list at State 3 is depicted in the following diagram::h]hnFor the sake of brevity, only the altered “sidewalk” list at State 3 is depicted in the following diagram:}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM/hj hhubjy)}(hX .-----------------------------------------------. v | .----------. .---------. .-----. .-----. | | sidewalk |---->| Dimitri |---->| Pic |---->| Pio |--' '----------' '---------' '-----' '-----'h]hX .-----------------------------------------------. v | .----------. .---------. .-----. .-----. | | sidewalk |---->| Dimitri |---->| Pic |---->| Pio |--' '----------' '---------' '-----' '-----'}hj sbah}(h]h ]h"]h$]h&]hhuh1jxhhhM2hj hhubj)}(hX Do note that list_bulk_move_tail() does not do any checking as to whether all three supplied ``struct list_head *`` parameters really do belong to the same list. If you use it outside the constraints the documentation gives, then the result is a matter between you and the implementation.h](h]Do note that list_bulk_move_tail() does not do any checking as to whether all three supplied }(hj hhhNhNubj$)}(h``struct list_head *``h]hstruct list_head *}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j#hj ubh parameters really do belong to the same list. If you use it outside the constraints the documentation gives, then the result is a matter between you and the implementation.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhM8hj hhubeh}(h]jah ]h"] moving entries and partial listsah$]h&]uh1hhj hhhhhMubh)}(hhh](h)}(hRotating entriesh]hRotating entries}(hj hhhNhNubah}(h]h ]h"]h$]h&]hjuh1hhj hhhhhM>ubj)}(hA common write operation on lists, especially when using them as queues, is to rotate it. A list rotation means entries at the front are sent to the back.h]hA common write operation on lists, especially when using them as queues, is to rotate it. A list rotation means entries at the front are sent to the back.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM@hj hhubj)}(hXFFor rotation, Linux provides us with two functions: list_rotate_left() and list_rotate_to_front(). The former can be pictured like a bicycle chain, taking the entry after the supplied ``struct list_head *`` and moving it to the tail, which in essence means the entire list, due to its circular nature, rotates by one position.h](hFor rotation, Linux provides us with two functions: list_rotate_left() and list_rotate_to_front(). The former can be pictured like a bicycle chain, taking the entry after the supplied }(hj) hhhNhNubj$)}(h``struct list_head *``h]hstruct list_head *}(hj1 hhhNhNubah}(h]h ]h"]h$]h&]uh1j#hj) ubhx and moving it to the tail, which in essence means the entire list, due to its circular nature, rotates by one position.}(hj) hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMChj hhubj)}(hThe latter, list_rotate_to_front(), takes the same concept one step further: instead of advancing the list by one entry, it advances it *until* the specified entry is the new front.h](hThe latter, list_rotate_to_front(), takes the same concept one step further: instead of advancing the list by one entry, it advances it }(hjI hhhNhNubhemphasis)}(h*until*h]huntil}(hjS hhhNhNubah}(h]h ]h"]h$]h&]uh1jQ hjI ubh& the specified entry is the new front.}(hjI hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMIhj hhubj)}(hIIn the following example, our starting state, State 0, is the following::h]hHIn the following example, our starting state, State 0, is the following:}(hjk hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMMhj hhubjy)}(hXj .-----------------------------------------------------------------. v | .--------. .-------. .---------. .-----. .---------. .-----. | | clowns |-->| Grock |-->| Dimitri |-->| Pic |-->| Alfredo |-->| Pio |-' '--------' '-------' '---------' '-----' '---------' '-----'h]hXj .-----------------------------------------------------------------. v | .--------. .-------. .---------. .-----. .---------. .-----. | | clowns |-->| Grock |-->| Dimitri |-->| Pic |-->| Alfredo |-->| Pio |-' '--------' '-------' '---------' '-----' '---------' '-----'}hjy sbah}(h]h ]h"]h$]h&]hhuh1jxhhhMOhj hhubj)}(hKThe example code being used to demonstrate list rotations is the following:h]hKThe example code being used to demonstrate list rotations is the following:}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMUhj hhubjy)}(hXstatic void circus_clowns_rotate(struct circus_priv *circus) { struct clown *grock, *dimitri, *pic, *alfredo, *pio; struct clown_car *car = &circus->car; /* ... clown initialization, list adding ... */ /* State 0 */ list_rotate_left(&car->clowns); /* State 1 */ list_rotate_to_front(&alfredo->node, &car->clowns); /* State 2 */ }h]hXstatic void circus_clowns_rotate(struct circus_priv *circus) { struct clown *grock, *dimitri, *pic, *alfredo, *pio; struct clown_car *car = &circus->car; /* ... clown initialization, list adding ... */ /* State 0 */ list_rotate_left(&car->clowns); /* State 1 */ list_rotate_to_front(&alfredo->node, &car->clowns); /* State 2 */ }}hj sbah}(h]h ]h"]h$]h&]hhjjjj}uh1jxhhhMWhj hhubj)}(h2In State 1, we arrive at the following situation::h]h1In State 1, we arrive at the following situation:}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMlhj hhubjy)}(hXj .-----------------------------------------------------------------. v | .--------. .---------. .-----. .---------. .-----. .-------. | | clowns |-->| Dimitri |-->| Pic |-->| Alfredo |-->| Pio |-->| Grock |-' '--------' '---------' '-----' '---------' '-----' '-------'h]hXj .-----------------------------------------------------------------. v | .--------. .---------. .-----. .---------. .-----. .-------. | | clowns |-->| Dimitri |-->| Pic |-->| Alfredo |-->| Pio |-->| Grock |-' '--------' '---------' '-----' '---------' '-----' '-------'}hj sbah}(h]h ]h"]h$]h&]hhuh1jxhhhMnhj hhubj)}(hQNext, after the list_rotate_to_front() call, we arrive in the following State 2::h]hPNext, after the list_rotate_to_front() call, we arrive in the following State 2:}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMthj hhubjy)}(hXj .-----------------------------------------------------------------. v | .--------. .---------. .-----. .-------. .---------. .-----. | | clowns |-->| Alfredo |-->| Pio |-->| Grock |-->| Dimitri |-->| Pic |-' '--------' '---------' '-----' '-------' '---------' '-----'h]hXj .-----------------------------------------------------------------. v | .--------. .---------. .-----. .-------. .---------. .-----. | | clowns |-->| Alfredo |-->| Pio |-->| Grock |-->| Dimitri |-->| Pic |-' '--------' '---------' '-----' '-------' '---------' '-----'}hj sbah}(h]h ]h"]h$]h&]hhuh1jxhhhMwhj hhubj)}(huAs is hopefully evident from the diagrams, the entries in front of "Alfredo" were cycled to the tail end of the list.h]hyAs is hopefully evident from the diagrams, the entries in front of “Alfredo” were cycled to the tail end of the list.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM}hj hhubeh}(h]jah ]h"]rotating entriesah$]h&]uh1hhj hhhhhM>ubh)}(hhh](h)}(hSwapping entriesh]hSwapping entries}(hj hhhNhNubah}(h]h ]h"]h$]h&]hjuh1hhj hhhhhMubj)}(hPAnother common operation is that two entries need to be swapped with each other.h]hPAnother common operation is that two entries need to be swapped with each other.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj hhubj)}(h-For this, Linux provides us with list_swap().h]h-For this, Linux provides us with list_swap().}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj hhubj)}(h|In the following example, we have a list with three entries, and swap two of them. This is our starting state in "State 0"::h]hIn the following example, we have a list with three entries, and swap two of them. This is our starting state in “State 0”:}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj hhubjy)}(h .-----------------------------------------. v | .--------. .-------. .---------. .-----. | | clowns |-->| Grock |-->| Dimitri |-->| Pic |-' '--------' '-------' '---------' '-----'h]h .-----------------------------------------. v | .--------. .-------. .---------. .-----. | | clowns |-->| Grock |-->| Dimitri |-->| Pic |-' '--------' '-------' '---------' '-----'}hj, sbah}(h]h ]h"]h$]h&]hhuh1jxhhhMhj hhubjy)}(hX0static void circus_clowns_swap(struct circus_priv *circus) { struct clown *grock, *dimitri, *pic; struct clown_car *car = &circus->car; /* ... clown initialization, list adding ... */ /* State 0 */ list_swap(&dimitri->node, &pic->node); /* State 1 */ }h]hX0static void circus_clowns_swap(struct circus_priv *circus) { struct clown *grock, *dimitri, *pic; struct clown_car *car = &circus->car; /* ... clown initialization, list adding ... */ /* State 0 */ list_swap(&dimitri->node, &pic->node); /* State 1 */ }}hj: sbah}(h]h ]h"]h$]h&]hhjjjj}uh1jxhhhMhj hhubj)}(h0The resulting list at State 1 is the following::h]h/The resulting list at State 1 is the following:}(hjI hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj hhubjy)}(h .-----------------------------------------. v | .--------. .-------. .-----. .---------. | | clowns |-->| Grock |-->| Pic |-->| Dimitri |-' '--------' '-------' '-----' '---------'h]h .-----------------------------------------. v | .--------. .-------. .-----. .---------. | | clowns |-->| Grock |-->| Pic |-->| Dimitri |-' '--------' '-------' '-----' '---------'}hjW sbah}(h]h ]h"]h$]h&]hhuh1jxhhhMhj hhubj)}(hZAs is evident by comparing the diagrams, the "Pic" and "Dimitri" nodes have traded places.h]hbAs is evident by comparing the diagrams, the “Pic” and “Dimitri” nodes have traded places.}(hje hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj hhubeh}(h]jah ]h"]swapping entriesah$]h&]uh1hhj hhhhhMubh)}(hhh](h)}(hSplicing two lists togetherh]hSplicing two lists together}(hj} hhhNhNubah}(h]h ]h"]h$]h&]hjuh1hhjz hhhhhMubj)}(hSay we have two lists, in the following example one represented by a list head we call "knie" and one we call "stey". In a hypothetical circus acquisition, the two list of clowns should be spliced together. The following is our situation in "State 0"::h]hXSay we have two lists, in the following example one represented by a list head we call “knie” and one we call “stey”. In a hypothetical circus acquisition, the two list of clowns should be spliced together. The following is our situation in “State 0”:}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjz hhubjy)}(hX .-----------------------------------------. | | v | .------. .-------. .---------. .-----. | | knie |-->| Grock |-->| Dimitri |-->| Pic |--' '------' '-------' '---------' '-----' .-----------------------------. v | .------. .---------. .-----. | | stey |-->| Alfredo |-->| Pio |--' '------' '---------' '-----'h]hX .-----------------------------------------. | | v | .------. .-------. .---------. .-----. | | knie |-->| Grock |-->| Dimitri |-->| Pic |--' '------' '-------' '---------' '-----' .-----------------------------. v | .------. .---------. .-----. | | stey |-->| Alfredo |-->| Pio |--' '------' '---------' '-----'}hj sbah}(h]h ]h"]h$]h&]hhuh1jxhhhMhjz hhubj)}(haThe function to splice these two lists together is list_splice(). Our example code is as follows:h]haThe function to splice these two lists together is list_splice(). Our example code is as follows:}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjz hhubjy)}(hXKstatic void circus_clowns_splice(void) { struct clown *grock, *dimitri, *pic, *alfredo, *pio; struct list_head knie = LIST_HEAD_INIT(knie); struct list_head stey = LIST_HEAD_INIT(stey); /* ... Clown allocation and initialization here ... */ list_add_tail(&grock->node, &knie); list_add_tail(&dimitri->node, &knie); list_add_tail(&pic->node, &knie); list_add_tail(&alfredo->node, &stey); list_add_tail(&pio->node, &stey); /* State 0 */ list_splice(&stey, &dimitri->node); /* State 1 */ }h]hXKstatic void circus_clowns_splice(void) { struct clown *grock, *dimitri, *pic, *alfredo, *pio; struct list_head knie = LIST_HEAD_INIT(knie); struct list_head stey = LIST_HEAD_INIT(stey); /* ... Clown allocation and initialization here ... */ list_add_tail(&grock->node, &knie); list_add_tail(&dimitri->node, &knie); list_add_tail(&pic->node, &knie); list_add_tail(&alfredo->node, &stey); list_add_tail(&pio->node, &stey); /* State 0 */ list_splice(&stey, &dimitri->node); /* State 1 */ }}hj sbah}(h]h ]h"]h$]h&]hhjjjj}uh1jxhhhMhjz hhubj)}(hThe list_splice() call here adds all the entries in ``stey`` to the list ``dimitri``'s ``node`` list_head is in, after the ``node`` of ``dimitri``. A somewhat surprising diagram of the resulting "State 1" follows::h](h4The list_splice() call here adds all the entries in }(hj hhhNhNubj$)}(h``stey``h]hstey}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j#hj ubh to the list }(hj hhhNhNubj$)}(h ``dimitri``h]hdimitri}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j#hj ubh’s }(hj hhhNhNubj$)}(h``node``h]hnode}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j#hj ubh list_head is in, after the }(hj hhhNhNubj$)}(h``node``h]hnode}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j#hj ubh of }(hj hhhNhNubj$)}(h ``dimitri``h]hdimitri}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j#hj ubhG. A somewhat surprising diagram of the resulting “State 1” follows:}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhjz hhubjy)}(hX1 .-----------------------------------------------------------------. | | v | .------. .-------. .---------. .---------. .-----. .-----. | | knie |-->| Grock |-->| Dimitri |-->| Alfredo |-->| Pio |-->| Pic |--' '------' '-------' '---------' '---------' '-----' '-----' ^ .-------------------------------' | .------. | | stey |--' '------'h]hX1 .-----------------------------------------------------------------. | | v | .------. .-------. .---------. .---------. .-----. .-----. | | knie |-->| Grock |-->| Dimitri |-->| Alfredo |-->| Pio |-->| Pic |--' '------' '-------' '---------' '---------' '-----' '-----' ^ .-------------------------------' | .------. | | stey |--' '------'}hj, sbah}(h]h ]h"]h$]h&]hhuh1jxhhhMhjz hhubj)}(hTraversing the ``stey`` list no longer results in correct behavior. A call of list_for_each() on ``stey`` results in an infinite loop, as it never returns back to the ``stey`` list head.h](hTraversing the }(hj: hhhNhNubj$)}(h``stey``h]hstey}(hjB hhhNhNubah}(h]h ]h"]h$]h&]uh1j#hj: ubhJ list no longer results in correct behavior. A call of list_for_each() on }(hj: hhhNhNubj$)}(h``stey``h]hstey}(hjT hhhNhNubah}(h]h ]h"]h$]h&]uh1j#hj: ubh> results in an infinite loop, as it never returns back to the }(hj: hhhNhNubj$)}(h``stey``h]hstey}(hjf hhhNhNubah}(h]h ]h"]h$]h&]uh1j#hj: ubh list head.}(hj: hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhjz hhubj)}(hThis is because list_splice() did not reinitialize the list_head it took entries from, leaving its pointer pointing into what is now a different list.h]hThis is because list_splice() did not reinitialize the list_head it took entries from, leaving its pointer pointing into what is now a different list.}(hj~ hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjz hhubj)}(hIf we want to avoid this situation, list_splice_init() can be used. It does the same thing as list_splice(), except reinitalizes the donor list_head after the transplant.h]hIf we want to avoid this situation, list_splice_init() can be used. It does the same thing as list_splice(), except reinitalizes the donor list_head after the transplant.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjz hhubeh}(h]jah ]h"]splicing two lists togetherah$]h&]uh1hhj hhhhhMubh)}(hhh](h)}(hConcurrency considerationsh]hConcurrency considerations}(hj hhhNhNubah}(h]h ]h"]h$]h&]hj6uh1hhj hhhhhMubj)}(hXDConcurrent access and modification of a list needs to be protected with a lock in most cases. Alternatively and preferably, one may use the RCU primitives for lists in read-mostly use-cases, where read accesses to the list are common but modifications to the list less so. See Documentation/RCU/listRCU.rst for more details.h]hXDConcurrent access and modification of a list needs to be protected with a lock in most cases. Alternatively and preferably, one may use the RCU primitives for lists in read-mostly use-cases, where read accesses to the list are common but modifications to the list less so. See Documentation/RCU/listRCU.rst for more details.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj hhubeh}(h]j<ah ]h"]concurrency considerationsah$]h&]uh1hhj hhhhhMubh)}(hhh](h)}(hFurther readingh]hFurther reading}(hj hhhNhNubah}(h]h ]h"]h$]h&]hjXuh1hhj hhhhhMubjL)}(hhh]jQ)}(hl`How does the kernel implements Linked Lists? - KernelNewbies `_ h]j)}(hk`How does the kernel implements Linked Lists? - KernelNewbies `_h](j )}(hj h]hh]h}(h]9how-does-the-kernel-implements-linked-lists-kernelnewbiesah ]h"]`'s links to point to itself h]j)}(hNinitialize a :c:type:`struct list_head `'s links to point to itselfh](h initialize a }(hjhhhNhNubh)}(h&:c:type:`struct list_head `h]j$)}(hjh]hstruct list_head}(hjhhhNhNubah}(h]h ](xrefjc-typeeh"]h$]h&]uh1j#hjubah}(h]h ]h"]h$]h&]refdoc core-api/list refdomainjreftypetype refexplicitrefwarn c:parent_keysphinx.domains.c LookupKey)}data]sb reftarget list_headuh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhKhjubh’s links to point to itself}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjhKhj&hhubh container)}(h0**Parameters** ``name`` name of the list_headh](j)}(h**Parameters**h]hstrong)}(hj h]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhKhjubhdefinition_list)}(hhh]hdefinition_list_item)}(h``name`` name of the list_headh](hterm)}(h``name``h]j$)}(hj4h]hname}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1j#hj2ubah}(h]h ]h"]h$]h&]uh1j0hS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhKhj,ubh definition)}(hhh]j)}(hname of the list_headh]hname of the list_head}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhKhjLubah}(h]h ]h"]h$]h&]uh1jJhj,ubeh}(h]h ]h"]h$]h&]uh1j*hjIhKhj'ubah}(h]h ]h"]h$]h&]uh1j%hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj&hhhNhNubj8)}(hhh]h}(h]h ]h"]h$]h&]entries](jDLIST_HEAD (C macro) c.LIST_HEADhNtauh1j7hj&hhhNhNubjI)}(hhh](jN)}(h LIST_HEADh]jT)}(h LIST_HEADh]jZ)}(h LIST_HEADh]j`)}(hjh]h LIST_HEAD}(hjhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjubah}(h]h ](jrjseh"]h$]h&]hhuh1jYhjhhhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhKubah}(h]h ]h"]h$]h&]hhj~uh1jSjjhjhhhjhKubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jMhjhKhjhhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhjhhhjhKubeh}(h]h ](jmacroeh"]h$]h&]jjjjjjjjjuh1jHhhhj&hNhNubj)}(h``LIST_HEAD (name)``h]j$)}(hjh]hLIST_HEAD (name)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j#hjubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhK hj&hhubj)}(hRdefinition of a :c:type:`struct list_head ` with initialization values h]j)}(hQdefinition of a :c:type:`struct list_head ` with initialization valuesh](hdefinition of a }(hjhhhNhNubh)}(h&:c:type:`struct list_head `h]j$)}(hjh]hstruct list_head}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1j#hjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjj list_headuh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhKhjubh with initialization values}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjhKhj&hhubj)}(h0**Parameters** ``name`` name of the list_headh](j)}(h**Parameters**h]j)}(hjh]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhK"hjubj&)}(hhh]j+)}(h``name`` name of the list_headh](j1)}(h``name``h]j$)}(hj=h]hname}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1j#hj;ubah}(h]h ]h"]h$]h&]uh1j0hS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhK$hj7ubjK)}(hhh]j)}(hname of the list_headh]hname of the list_head}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhKhjSubah}(h]h ]h"]h$]h&]uh1jJhj7ubeh}(h]h ]h"]h$]h&]uh1j*hjRhK$hj4ubah}(h]h ]h"]h$]h&]uh1j%hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj&hhhNhNubj8)}(hhh]h}(h]h ]h"]h$]h&]entries](jDINIT_LIST_HEAD (C function)c.INIT_LIST_HEADhNtauh1j7hj&hhhNhNubjI)}(hhh](jN)}(h,void INIT_LIST_HEAD (struct list_head *list)h]jT)}(h+void INIT_LIST_HEAD(struct list_head *list)h](hdesc_sig_keyword_type)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]ktah"]h$]h&]uh1jhjhhhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhK%ubhdesc_sig_space)}(h h]h }(hjhhhNhNubah}(h]h ]wah"]h$]h&]uh1jhjhhhjhK%ubjZ)}(hINIT_LIST_HEADh]j`)}(hINIT_LIST_HEADh]hINIT_LIST_HEAD}(hjhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjubah}(h]h ](jrjseh"]h$]h&]hhuh1jYhjhhhjhK%ubhdesc_parameterlist)}(h(struct list_head *list)h]hdesc_parameter)}(hstruct list_head *listh](hdesc_sig_keyword)}(hstructh]hstruct}(hjhhhNhNubah}(h]h ]kah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j`)}(h list_headh]h list_head}(hjhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjubah}(h]h ]h"]h$]h&] refdomainjreftype identifier reftargetjmodnameN classnameNjj)}j]j ASTIdentifier)}jjsbc.INIT_LIST_HEADasbuh1hhjubj)}(h h]h }(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubhdesc_sig_punctuation)}(hjh]h*}(hj3hhhNhNubah}(h]h ]pah"]h$]h&]uh1j1hjubj`)}(hlisth]hlist}(hjAhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubah}(h]h ]h"]h$]h&]hhuh1jhjhhhjhK%ubeh}(h]h ]h"]h$]h&]hhj~uh1jSjjhjhhhjhK%ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jMhjhK%hjhhubj)}(hhh]j)}(h Initialize a list_head structureh]h Initialize a list_head structure}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhK%hjhhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhK%ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jHhhhj&hNhNubj)}(h**Parameters** ``struct list_head *list`` list_head structure to be initialized. **Description** Initializes the list_head to point to itself. If it is a list header, the result is an empty list.h](j)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhK)hjubj&)}(hhh]j+)}(hB``struct list_head *list`` list_head structure to be initialized. h](j1)}(h``struct list_head *list``h]j$)}(hjh]hstruct list_head *list}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j#hjubah}(h]h ]h"]h$]h&]uh1j0hS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhK&hjubjK)}(hhh]j)}(h&list_head structure to be initialized.h]h&list_head structure to be initialized.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhK&hjubah}(h]h ]h"]h$]h&]uh1jJhjubeh}(h]h ]h"]h$]h&]uh1j*hjhK&hjubah}(h]h ]h"]h$]h&]uh1j%hjubj)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhK(hjubj)}(hcInitializes the list_head to point to itself. If it is a list header, the result is an empty list.h]hcInitializes the list_head to point to itself. If it is a list header, the result is an empty list.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhK'hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj&hhhNhNubj8)}(hhh]h}(h]h ]h"]h$]h&]entries](jDlist_add (C function) c.list_addhNtauh1j7hj&hhhNhNubjI)}(hhh](jN)}(h=void list_add (struct list_head *new, struct list_head *head)h]jT)}(hnext pointer that points to it. This is useful for implementing queues, in particular one that the elements will be walked through forwards locklessly.h](j)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhKhjubj&)}(hhh](j+)}(h0``struct list_head *new`` new entry to be added h](j1)}(h``struct list_head *new``h]j$)}(hjh]hstruct list_head *new}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j#hjubah}(h]h ]h"]h$]h&]uh1j0hS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhKhjubjK)}(hhh]j)}(hnew entry to be addedh]hnew entry to be added}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jJhjubeh}(h]h ]h"]h$]h&]uh1j*hjhKhjubj+)}(h6``struct list_head *head`` list head to add it before h](j1)}(h``struct list_head *head``h]j$)}(hj*h]hstruct list_head *head}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1j#hj(ubah}(h]h ]h"]h$]h&]uh1j0hS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhKhj$ubjK)}(hhh]j)}(hlist head to add it beforeh]hlist head to add it before}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1hhj?hKhj@ubah}(h]h ]h"]h$]h&]uh1jJhj$ubeh}(h]h ]h"]h$]h&]uh1j*hj?hKhjubeh}(h]h ]h"]h$]h&]uh1j%hjubj)}(h**Description**h]j)}(hjeh]h Description}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jhjcubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhKhjubj)}(hInsert a new entry before the specified head, using a release barrier to set the ->next pointer that points to it. This is useful for implementing queues, in particular one that the elements will be walked through forwards locklessly.h]hInsert a new entry before the specified head, using a release barrier to set the ->next pointer that points to it. This is useful for implementing queues, in particular one that the elements will be walked through forwards locklessly.}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj&hhhNhNubj8)}(hhh]h}(h]h ]h"]h$]h&]entries](jDlist_del (C function) c.list_delhNtauh1j7hj&hhhNhNubjI)}(hhh](jN)}(h'void list_del (struct list_head *entry)h]jT)}(h&void list_del(struct list_head *entry)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhKubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhKubjZ)}(hlist_delh]j`)}(hlist_delh]hlist_del}(hjhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjubah}(h]h ](jrjseh"]h$]h&]hhuh1jYhjhhhjhKubj)}(h(struct list_head *entry)h]j)}(hstruct list_head *entryh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j`)}(h list_headh]h list_head}(hjhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jjsb c.list_delasbuh1hhjubj)}(h h]h }(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj2)}(hjh]h*}(hj3hhhNhNubah}(h]h ]j=ah"]h$]h&]uh1j1hjubj`)}(hentryh]hentry}(hj@hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubah}(h]h ]h"]h$]h&]hhuh1jhjhhhjhKubeh}(h]h ]h"]h$]h&]hhj~uh1jSjjhjhhhjhKubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jMhjhKhjhhubj)}(hhh]j)}(hdeletes entry from list.h]hdeletes entry from list.}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhKhjghhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhKubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jHhhhj&hNhNubj)}(h**Parameters** ``struct list_head *entry`` the element to delete from the list. **Note** list_empty() on entry does not return true after this, the entry is in an undefined state.h](j)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhjubj&)}(hhh]j+)}(hA``struct list_head *entry`` the element to delete from the list. h](j1)}(h``struct list_head *entry``h]j$)}(hjh]hstruct list_head *entry}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j#hjubah}(h]h ]h"]h$]h&]uh1j0hS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhKhjubjK)}(hhh]j)}(h$the element to delete from the list.h]h$the element to delete from the list.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jJhjubeh}(h]h ]h"]h$]h&]uh1j*hjhKhjubah}(h]h ]h"]h$]h&]uh1j%hjubj)}(h**Note**h]j)}(hjh]hNote}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhjubj)}(hZlist_empty() on entry does not return true after this, the entry is in an undefined state.h]hZlist_empty() on entry does not return true after this, the entry is in an undefined state.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj&hhhNhNubj8)}(hhh]h}(h]h ]h"]h$]h&]entries](jDlist_replace (C function)c.list_replacehNtauh1j7hj&hhhNhNubjI)}(hhh](jN)}(h@void list_replace (struct list_head *old, struct list_head *new)h]jT)}(h?void list_replace(struct list_head *old, struct list_head *new)h](j)}(hvoidh]hvoid}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'hhhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhM ubj)}(h h]h }(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'hhhj9hM ubjZ)}(h list_replaceh]j`)}(h list_replaceh]h list_replace}(hjLhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjHubah}(h]h ](jrjseh"]h$]h&]hhuh1jYhj'hhhj9hM ubj)}(h.(struct list_head *old, struct list_head *new)h](j)}(hstruct list_head *oldh](j)}(hjh]hstruct}(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdubj)}(h h]h }(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdubh)}(hhh]j`)}(h list_headh]h list_head}(hjhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jjNsbc.list_replaceasbuh1hhjdubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdubj2)}(hjh]h*}(hjhhhNhNubah}(h]h ]j=ah"]h$]h&]uh1j1hjdubj`)}(holdh]hold}(hjhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjdubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj`ubj)}(hstruct list_head *newh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j`)}(h list_headh]h list_head}(hjhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.list_replaceasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj2)}(hjh]h*}(hj$hhhNhNubah}(h]h ]j=ah"]h$]h&]uh1j1hjubj`)}(hnewh]hnew}(hj1hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj`ubeh}(h]h ]h"]h$]h&]hhuh1jhj'hhhj9hM ubeh}(h]h ]h"]h$]h&]hhj~uh1jSjjhj#hhhj9hM ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jMhj9hM hj hhubj)}(hhh]j)}(hreplace old entry by new oneh]hreplace old entry by new one}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhM hjXhhubah}(h]h ]h"]h$]h&]uh1jhj hhhj9hM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjsjjsjjjuh1jHhhhj&hNhNubj)}(h**Parameters** ``struct list_head *old`` the element to be replaced ``struct list_head *new`` the new element to insert **Description** If **old** was empty, it will be overwritten.h](j)}(h**Parameters**h]j)}(hj}h]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj{ubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhjwubj&)}(hhh](j+)}(h5``struct list_head *old`` the element to be replaced h](j1)}(h``struct list_head *old``h]j$)}(hjh]hstruct list_head *old}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j#hjubah}(h]h ]h"]h$]h&]uh1j0hS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhM hjubjK)}(hhh]j)}(hthe element to be replacedh]hthe element to be replaced}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1jJhjubeh}(h]h ]h"]h$]h&]uh1j*hjhM hjubj+)}(h4``struct list_head *new`` the new element to insert h](j1)}(h``struct list_head *new``h]j$)}(hjh]hstruct list_head *new}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j#hjubah}(h]h ]h"]h$]h&]uh1j0hS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhM hjubjK)}(hhh]j)}(hthe new element to inserth]hthe new element to insert}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1jJhjubeh}(h]h ]h"]h$]h&]uh1j*hjhM hjubeh}(h]h ]h"]h$]h&]uh1j%hjwubj)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhjwubj)}(h-If **old** was empty, it will be overwritten.h](hIf }(hj&hhhNhNubj)}(h**old**h]hold}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&ubh# was empty, it will be overwritten.}(hj&hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhM hjwubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj&hhhNhNubj8)}(hhh]h}(h]h ]h"]h$]h&]entries](jDlist_replace_init (C function)c.list_replace_inithNtauh1j7hj&hhhNhNubjI)}(hhh](jN)}(hEvoid list_replace_init (struct list_head *old, struct list_head *new)h]jT)}(hDvoid list_replace_init(struct list_head *old, struct list_head *new)h](j)}(hvoidh]hvoid}(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjchhhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMubj)}(h h]h }(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjchhhjuhMubjZ)}(hlist_replace_inith]j`)}(hlist_replace_inith]hlist_replace_init}(hjhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjubah}(h]h ](jrjseh"]h$]h&]hhuh1jYhjchhhjuhMubj)}(h.(struct list_head *old, struct list_head *new)h](j)}(hstruct list_head *oldh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j`)}(h list_headh]h list_head}(hjhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jjsbc.list_replace_initasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj2)}(hjh]h*}(hjhhhNhNubah}(h]h ]j=ah"]h$]h&]uh1j1hjubj`)}(holdh]hold}(hjhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubj)}(hstruct list_head *newh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j`)}(h list_headh]h list_head}(hj4hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj1ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj6modnameN classnameNjj)}j]jc.list_replace_initasbuh1hhjubj)}(h h]h }(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj2)}(hjh]h*}(hj`hhhNhNubah}(h]h ]j=ah"]h$]h&]uh1j1hjubj`)}(hnewh]hnew}(hjmhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubeh}(h]h ]h"]h$]h&]hhuh1jhjchhhjuhMubeh}(h]h ]h"]h$]h&]hhj~uh1jSjjhj_hhhjuhMubah}(h]jZah ](jjeh"]h$]h&]jj)jhuh1jMhjuhMhj\hhubj)}(hhh]j)}(h7replace old entry by new one and initialize the old oneh]h7replace old entry by new one and initialize the old one}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jhj\hhhjuhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jHhhhj&hNhNubj)}(h**Parameters** ``struct list_head *old`` the element to be replaced ``struct list_head *new`` the new element to insert **Description** If **old** was empty, it will be overwritten.h](j)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhjubj&)}(hhh](j+)}(h5``struct list_head *old`` the element to be replaced h](j1)}(h``struct list_head *old``h]j$)}(hjh]hstruct list_head *old}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j#hjubah}(h]h ]h"]h$]h&]uh1j0hS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhjubjK)}(hhh]j)}(hthe element to be replacedh]hthe element to be replaced}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jJhjubeh}(h]h ]h"]h$]h&]uh1j*hjhMhjubj+)}(h4``struct list_head *new`` the new element to insert h](j1)}(h``struct list_head *new``h]j$)}(hjh]hstruct list_head *new}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j#hjubah}(h]h ]h"]h$]h&]uh1j0hS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhj ubjK)}(hhh]j)}(hthe new element to inserth]hthe new element to insert}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj&hMhj'ubah}(h]h ]h"]h$]h&]uh1jJhj ubeh}(h]h ]h"]h$]h&]uh1j*hj&hMhjubeh}(h]h ]h"]h$]h&]uh1j%hjubj)}(h**Description**h]j)}(hjLh]h Description}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhjubj)}(h-If **old** was empty, it will be overwritten.h](hIf }(hjbhhhNhNubj)}(h**old**h]hold}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjbubh# was empty, it will be overwritten.}(hjbhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj&hhhNhNubj8)}(hhh]h}(h]h ]h"]h$]h&]entries](jDlist_swap (C function) c.list_swaphNtauh1j7hj&hhhNhNubjI)}(hhh](jN)}(hCvoid list_swap (struct list_head *entry1, struct list_head *entry2)h]jT)}(hBvoid list_swap(struct list_head *entry1, struct list_head *entry2)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhM(ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM(ubjZ)}(h list_swaph]j`)}(h list_swaph]h list_swap}(hjhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjubah}(h]h ](jrjseh"]h$]h&]hhuh1jYhjhhhjhM(ubj)}(h4(struct list_head *entry1, struct list_head *entry2)h](j)}(hstruct list_head *entry1h](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j`)}(h list_headh]h list_head}(hjhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jjsb c.list_swapasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj2)}(hjh]h*}(hj,hhhNhNubah}(h]h ]j=ah"]h$]h&]uh1j1hjubj`)}(hentry1h]hentry1}(hj9hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubj)}(hstruct list_head *entry2h](j)}(hjh]hstruct}(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNubj)}(h h]h }(hj_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNubh)}(hhh]j`)}(h list_headh]h list_head}(hjphhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjmubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjrmodnameN classnameNjj)}j]j c.list_swapasbuh1hhjNubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNubj2)}(hjh]h*}(hjhhhNhNubah}(h]h ]j=ah"]h$]h&]uh1j1hjNubj`)}(hentry2h]hentry2}(hjhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjNubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubeh}(h]h ]h"]h$]h&]hhuh1jhjhhhjhM(ubeh}(h]h ]h"]h$]h&]hhj~uh1jSjjhjhhhjhM(ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jMhjhM(hjhhubj)}(hhh]j)}(hAreplace entry1 with entry2 and re-add entry1 at entry2's positionh]hCreplace entry1 with entry2 and re-add entry1 at entry2’s position}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhM(hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM(ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jHhhhj&hNhNubj)}(h**Parameters** ``struct list_head *entry1`` the location to place entry2 ``struct list_head *entry2`` the location to place entry1h](j)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhM,hjubj&)}(hhh](j+)}(h:``struct list_head *entry1`` the location to place entry2 h](j1)}(h``struct list_head *entry1``h]j$)}(hj h]hstruct list_head *entry1}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j#hj ubah}(h]h ]h"]h$]h&]uh1j0hS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhM)hj ubjK)}(hhh]j)}(hthe location to place entry2h]hthe location to place entry2}(hj- hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj) hM)hj* ubah}(h]h ]h"]h$]h&]uh1jJhj ubeh}(h]h ]h"]h$]h&]uh1j*hj) hM)hj ubj+)}(h9``struct list_head *entry2`` the location to place entry1h](j1)}(h``struct list_head *entry2``h]j$)}(hjM h]hstruct list_head *entry2}(hjO hhhNhNubah}(h]h ]h"]h$]h&]uh1j#hjK ubah}(h]h ]h"]h$]h&]uh1j0hS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhM+hjG ubjK)}(hhh]j)}(hthe location to place entry1h]hthe location to place entry1}(hjf hhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhM*hjc ubah}(h]h ]h"]h$]h&]uh1jJhjG ubeh}(h]h ]h"]h$]h&]uh1j*hjb hM+hj ubeh}(h]h ]h"]h$]h&]uh1j%hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj&hhhNhNubj8)}(hhh]h}(h]h ]h"]h$]h&]entries](jDlist_del_init (C function)c.list_del_inithNtauh1j7hj&hhhNhNubjI)}(hhh](jN)}(h,void list_del_init (struct list_head *entry)h]jT)}(h+void list_del_init(struct list_head *entry)h](j)}(hvoidh]hvoid}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhM9ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhj hM9ubjZ)}(h list_del_inith]j`)}(h list_del_inith]h list_del_init}(hj hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj ubah}(h]h ](jrjseh"]h$]h&]hhuh1jYhj hhhj hM9ubj)}(h(struct list_head *entry)h]j)}(hstruct list_head *entryh](j)}(hjh]hstruct}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubh)}(hhh]j`)}(h list_headh]h list_head}(hj!hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj!modnameN classnameNjj)}j]j)}jj sbc.list_del_initasbuh1hhj ubj)}(h h]h }(hj"!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj2)}(hjh]h*}(hj0!hhhNhNubah}(h]h ]j=ah"]h$]h&]uh1j1hj ubj`)}(hentryh]hentry}(hj=!hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj ubah}(h]h ]h"]h$]h&]hhuh1jhj hhhj hM9ubeh}(h]h ]h"]h$]h&]hhj~uh1jSjjhj hhhj hM9ubah}(h]j ah ](jjeh"]h$]h&]jj)jhuh1jMhj hM9hj hhubj)}(hhh]j)}(h,deletes entry from list and reinitialize it.h]h,deletes entry from list and reinitialize it.}(hjg!hhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhM9hjd!hhubah}(h]h ]h"]h$]h&]uh1jhj hhhj hM9ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj!jj!jjjuh1jHhhhj&hNhNubj)}(hR**Parameters** ``struct list_head *entry`` the element to delete from the list.h](j)}(h**Parameters**h]j)}(hj!h]h Parameters}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!ubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhM=hj!ubj&)}(hhh]j+)}(h@``struct list_head *entry`` the element to delete from the list.h](j1)}(h``struct list_head *entry``h]j$)}(hj!h]hstruct list_head *entry}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1j#hj!ubah}(h]h ]h"]h$]h&]uh1j0hS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhM?hj!ubjK)}(hhh]j)}(h$the element to delete from the list.h]h$the element to delete from the list.}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhM:hj!ubah}(h]h ]h"]h$]h&]uh1jJhj!ubeh}(h]h ]h"]h$]h&]uh1j*hj!hM?hj!ubah}(h]h ]h"]h$]h&]uh1j%hj!ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj&hhhNhNubj8)}(hhh]h}(h]h ]h"]h$]h&]entries](jDlist_move (C function) c.list_movehNtauh1j7hj&hhhNhNubjI)}(hhh](jN)}(h?void list_move (struct list_head *list, struct list_head *head)h]jT)}(h>void list_move(struct list_head *list, struct list_head *head)h](j)}(hvoidh]hvoid}(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!hhhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMCubj)}(h h]h }(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!hhhj"hMCubjZ)}(h list_moveh]j`)}(h list_moveh]h list_move}(hj#"hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj"ubah}(h]h ](jrjseh"]h$]h&]hhuh1jYhj!hhhj"hMCubj)}(h0(struct list_head *list, struct list_head *head)h](j)}(hstruct list_head *listh](j)}(hjh]hstruct}(hj?"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;"ubj)}(h h]h }(hjL"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;"ubh)}(hhh]j`)}(h list_headh]h list_head}(hj]"hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjZ"ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj_"modnameN classnameNjj)}j]j)}jj%"sb c.list_moveasbuh1hhj;"ubj)}(h h]h }(hj}"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;"ubj2)}(hjh]h*}(hj"hhhNhNubah}(h]h ]j=ah"]h$]h&]uh1j1hj;"ubj`)}(hlisth]hlist}(hj"hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj;"ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj7"ubj)}(hstruct list_head *headh](j)}(hjh]hstruct}(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"ubj)}(h h]h }(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"ubh)}(hhh]j`)}(h list_headh]h list_head}(hj"hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj"ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj"modnameN classnameNjj)}j]jy" c.list_moveasbuh1hhj"ubj)}(h h]h }(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"ubj2)}(hjh]h*}(hj"hhhNhNubah}(h]h ]j=ah"]h$]h&]uh1j1hj"ubj`)}(hheadh]hhead}(hj#hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj"ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj7"ubeh}(h]h ]h"]h$]h&]hhuh1jhj!hhhj"hMCubeh}(h]h ]h"]h$]h&]hhj~uh1jSjjhj!hhhj"hMCubah}(h]j!ah ](jjeh"]h$]h&]jj)jhuh1jMhj"hMChj!hhubj)}(hhh]j)}(h.delete from one list and add as another's headh]h0delete from one list and add as another’s head}(hj2#hhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMChj/#hhubah}(h]h ]h"]h$]h&]uh1jhj!hhhj"hMCubeh}(h]h ](jfunctioneh"]h$]h&]jjjjJ#jjJ#jjjuh1jHhhhj&hNhNubj)}(h**Parameters** ``struct list_head *list`` the entry to move ``struct list_head *head`` the head that will precede our entryh](j)}(h**Parameters**h]j)}(hjT#h]h Parameters}(hjV#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjR#ubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMGhjN#ubj&)}(hhh](j+)}(h-``struct list_head *list`` the entry to move h](j1)}(h``struct list_head *list``h]j$)}(hjs#h]hstruct list_head *list}(hju#hhhNhNubah}(h]h ]h"]h$]h&]uh1j#hjq#ubah}(h]h ]h"]h$]h&]uh1j0hS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMDhjm#ubjK)}(hhh]j)}(hthe entry to moveh]hthe entry to move}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj#hMDhj#ubah}(h]h ]h"]h$]h&]uh1jJhjm#ubeh}(h]h ]h"]h$]h&]uh1j*hj#hMDhjj#ubj+)}(h?``struct list_head *head`` the head that will precede our entryh](j1)}(h``struct list_head *head``h]j$)}(hj#h]hstruct list_head *head}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1j#hj#ubah}(h]h ]h"]h$]h&]uh1j0hS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMFhj#ubjK)}(hhh]j)}(h$the head that will precede our entryh]h$the head that will precede our entry}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMEhj#ubah}(h]h ]h"]h$]h&]uh1jJhj#ubeh}(h]h ]h"]h$]h&]uh1j*hj#hMFhjj#ubeh}(h]h ]h"]h$]h&]uh1j%hjN#ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj&hhhNhNubj8)}(hhh]h}(h]h ]h"]h$]h&]entries](jDlist_move_tail (C function)c.list_move_tailhNtauh1j7hj&hhhNhNubjI)}(hhh](jN)}(hDvoid list_move_tail (struct list_head *list, struct list_head *head)h]jT)}(hCvoid list_move_tail(struct list_head *list, struct list_head *head)h](j)}(hvoidh]hvoid}(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$hhhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMNubj)}(h h]h }(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$hhhj$hMNubjZ)}(hlist_move_tailh]j`)}(hlist_move_tailh]hlist_move_tail}(hj'$hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj#$ubah}(h]h ](jrjseh"]h$]h&]hhuh1jYhj$hhhj$hMNubj)}(h0(struct list_head *list, struct list_head *head)h](j)}(hstruct list_head *listh](j)}(hjh]hstruct}(hjC$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?$ubj)}(h h]h }(hjP$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?$ubh)}(hhh]j`)}(h list_headh]h list_head}(hja$hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj^$ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjc$modnameN classnameNjj)}j]j)}jj)$sbc.list_move_tailasbuh1hhj?$ubj)}(h h]h }(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?$ubj2)}(hjh]h*}(hj$hhhNhNubah}(h]h ]j=ah"]h$]h&]uh1j1hj?$ubj`)}(hlisth]hlist}(hj$hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj?$ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj;$ubj)}(hstruct list_head *headh](j)}(hjh]hstruct}(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ubj)}(h h]h }(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ubh)}(hhh]j`)}(h list_headh]h list_head}(hj$hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj$ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj$modnameN classnameNjj)}j]j}$c.list_move_tailasbuh1hhj$ubj)}(h h]h }(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ubj2)}(hjh]h*}(hj$hhhNhNubah}(h]h ]j=ah"]h$]h&]uh1j1hj$ubj`)}(hheadh]hhead}(hj %hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj$ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj;$ubeh}(h]h ]h"]h$]h&]hhuh1jhj$hhhj$hMNubeh}(h]h ]h"]h$]h&]hhj~uh1jSjjhj#hhhj$hMNubah}(h]j#ah ](jjeh"]h$]h&]jj)jhuh1jMhj$hMNhj#hhubj)}(hhh]j)}(h.delete from one list and add as another's tailh]h0delete from one list and add as another’s tail}(hj6%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMNhj3%hhubah}(h]h ]h"]h$]h&]uh1jhj#hhhj$hMNubeh}(h]h ](jfunctioneh"]h$]h&]jjjjN%jjN%jjjuh1jHhhhj&hNhNubj)}(h**Parameters** ``struct list_head *list`` the entry to move ``struct list_head *head`` the head that will follow our entryh](j)}(h**Parameters**h]j)}(hjX%h]h Parameters}(hjZ%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjV%ubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMRhjR%ubj&)}(hhh](j+)}(h-``struct list_head *list`` the entry to move h](j1)}(h``struct list_head *list``h]j$)}(hjw%h]hstruct list_head *list}(hjy%hhhNhNubah}(h]h ]h"]h$]h&]uh1j#hju%ubah}(h]h ]h"]h$]h&]uh1j0hS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMOhjq%ubjK)}(hhh]j)}(hthe entry to moveh]hthe entry to move}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj%hMOhj%ubah}(h]h ]h"]h$]h&]uh1jJhjq%ubeh}(h]h ]h"]h$]h&]uh1j*hj%hMOhjn%ubj+)}(h>``struct list_head *head`` the head that will follow our entryh](j1)}(h``struct list_head *head``h]j$)}(hj%h]hstruct list_head *head}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1j#hj%ubah}(h]h ]h"]h$]h&]uh1j0hS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMQhj%ubjK)}(hhh]j)}(h#the head that will follow our entryh]h#the head that will follow our entry}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMPhj%ubah}(h]h ]h"]h$]h&]uh1jJhj%ubeh}(h]h ]h"]h$]h&]uh1j*hj%hMQhjn%ubeh}(h]h ]h"]h$]h&]uh1j%hjR%ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj&hhhNhNubj8)}(hhh]h}(h]h ]h"]h$]h&]entries](jD list_bulk_move_tail (C function)c.list_bulk_move_tailhNtauh1j7hj&hhhNhNubjI)}(hhh](jN)}(hbvoid list_bulk_move_tail (struct list_head *head, struct list_head *first, struct list_head *last)h]jT)}(havoid list_bulk_move_tail(struct list_head *head, struct list_head *first, struct list_head *last)h](j)}(hvoidh]hvoid}(hj &hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&hhhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMZubj)}(h h]h }(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&hhhj&hMZubjZ)}(hlist_bulk_move_tailh]j`)}(hlist_bulk_move_tailh]hlist_bulk_move_tail}(hj+&hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj'&ubah}(h]h ](jrjseh"]h$]h&]hhuh1jYhj&hhhj&hMZubj)}(hI(struct list_head *head, struct list_head *first, struct list_head *last)h](j)}(hstruct list_head *headh](j)}(hjh]hstruct}(hjG&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjC&ubj)}(h h]h }(hjT&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjC&ubh)}(hhh]j`)}(h list_headh]h list_head}(hje&hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjb&ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjg&modnameN classnameNjj)}j]j)}jj-&sbc.list_bulk_move_tailasbuh1hhjC&ubj)}(h h]h }(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjC&ubj2)}(hjh]h*}(hj&hhhNhNubah}(h]h ]j=ah"]h$]h&]uh1j1hjC&ubj`)}(hheadh]hhead}(hj&hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjC&ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj?&ubj)}(hstruct list_head *firsth](j)}(hjh]hstruct}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&ubj)}(h h]h }(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&ubh)}(hhh]j`)}(h list_headh]h list_head}(hj&hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj&ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj&modnameN classnameNjj)}j]j&c.list_bulk_move_tailasbuh1hhj&ubj)}(h h]h }(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&ubj2)}(hjh]h*}(hj'hhhNhNubah}(h]h ]j=ah"]h$]h&]uh1j1hj&ubj`)}(hfirsth]hfirst}(hj'hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj&ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj?&ubj)}(hstruct list_head *lasth](j)}(hjh]hstruct}(hj)'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%'ubj)}(h h]h }(hj6'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%'ubh)}(hhh]j`)}(h list_headh]h list_head}(hjG'hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjD'ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjI'modnameN classnameNjj)}j]j&c.list_bulk_move_tailasbuh1hhj%'ubj)}(h h]h }(hje'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%'ubj2)}(hjh]h*}(hjs'hhhNhNubah}(h]h ]j=ah"]h$]h&]uh1j1hj%'ubj`)}(hlasth]hlast}(hj'hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj%'ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj?&ubeh}(h]h ]h"]h$]h&]hhuh1jhj&hhhj&hMZubeh}(h]h ]h"]h$]h&]hhj~uh1jSjjhj&hhhj&hMZubah}(h]j%ah ](jjeh"]h$]h&]jj)jhuh1jMhj&hMZhj%hhubj)}(hhh]j)}(h'move a subsection of a list to its tailh]h'move a subsection of a list to its tail}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMZhj'hhubah}(h]h ]h"]h$]h&]uh1jhj%hhhj&hMZubeh}(h]h ](jfunctioneh"]h$]h&]jjjj'jj'jjjuh1jHhhhj&hNhNubj)}(hXb**Parameters** ``struct list_head *head`` the head that will follow our entry ``struct list_head *first`` first entry to move ``struct list_head *last`` last entry to move, can be the same as first **Description** Move all entries between **first** and including **last** before **head**. All three entries must belong to the same linked list.h](j)}(h**Parameters**h]j)}(hj'h]h Parameters}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'ubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhM^hj'ubj&)}(hhh](j+)}(h?``struct list_head *head`` the head that will follow our entry h](j1)}(h``struct list_head *head``h]j$)}(hj'h]hstruct list_head *head}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1j#hj'ubah}(h]h ]h"]h$]h&]uh1j0hS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhM[hj'ubjK)}(hhh]j)}(h#the head that will follow our entryh]h#the head that will follow our entry}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj(hM[hj(ubah}(h]h ]h"]h$]h&]uh1jJhj'ubeh}(h]h ]h"]h$]h&]uh1j*hj(hM[hj'ubj+)}(h0``struct list_head *first`` first entry to move h](j1)}(h``struct list_head *first``h]j$)}(hj$(h]hstruct list_head *first}(hj&(hhhNhNubah}(h]h ]h"]h$]h&]uh1j#hj"(ubah}(h]h ]h"]h$]h&]uh1j0hS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhM\hj(ubjK)}(hhh]j)}(hfirst entry to moveh]hfirst entry to move}(hj=(hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj9(hM\hj:(ubah}(h]h ]h"]h$]h&]uh1jJhj(ubeh}(h]h ]h"]h$]h&]uh1j*hj9(hM\hj'ubj+)}(hH``struct list_head *last`` last entry to move, can be the same as first h](j1)}(h``struct list_head *last``h]j$)}(hj](h]hstruct list_head *last}(hj_(hhhNhNubah}(h]h ]h"]h$]h&]uh1j#hj[(ubah}(h]h ]h"]h$]h&]uh1j0hS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhM]hjW(ubjK)}(hhh]j)}(h,last entry to move, can be the same as firsth]h,last entry to move, can be the same as first}(hjv(hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjr(hM]hjs(ubah}(h]h ]h"]h$]h&]uh1jJhjW(ubeh}(h]h ]h"]h$]h&]uh1j*hjr(hM]hj'ubeh}(h]h ]h"]h$]h&]uh1j%hj'ubj)}(h**Description**h]j)}(hj(h]h Description}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj(ubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhM_hj'ubj)}(hMove all entries between **first** and including **last** before **head**. All three entries must belong to the same linked list.h](hMove all entries between }(hj(hhhNhNubj)}(h **first**h]hfirst}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj(ubh and including }(hj(hhhNhNubj)}(h**last**h]hlast}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj(ubh before }(hj(hhhNhNubj)}(h**head**h]hhead}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj(ubh8. All three entries must belong to the same linked list.}(hj(hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhM^hj'ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj&hhhNhNubj8)}(hhh]h}(h]h ]h"]h$]h&]entries](jDlist_is_first (C function)c.list_is_firsthNtauh1j7hj&hhhNhNubjI)}(hhh](jN)}(hNint list_is_first (const struct list_head *list, const struct list_head *head)h]jT)}(hMint list_is_first(const struct list_head *list, const struct list_head *head)h](j)}(hinth]hint}(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)hhhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMqubj)}(h h]h }(hj")hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)hhhj!)hMqubjZ)}(h list_is_firsth]j`)}(h list_is_firsth]h list_is_first}(hj4)hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj0)ubah}(h]h ](jrjseh"]h$]h&]hhuh1jYhj)hhhj!)hMqubj)}(h<(const struct list_head *list, const struct list_head *head)h](j)}(hconst struct list_head *listh](j)}(hconsth]hconst}(hjP)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjL)ubj)}(h h]h }(hj^)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjL)ubj)}(hjh]hstruct}(hjl)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjL)ubj)}(h h]h }(hjy)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjL)ubh)}(hhh]j`)}(h list_headh]h list_head}(hj)hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj)ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj)modnameN classnameNjj)}j]j)}jj6)sbc.list_is_firstasbuh1hhjL)ubj)}(h h]h }(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjL)ubj2)}(hjh]h*}(hj)hhhNhNubah}(h]h ]j=ah"]h$]h&]uh1j1hjL)ubj`)}(hlisth]hlist}(hj)hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjL)ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjH)ubj)}(hconst struct list_head *headh](j)}(hjR)h]hconst}(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)ubj)}(h h]h }(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)ubj)}(hjh]hstruct}(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)ubj)}(h h]h }(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)ubh)}(hhh]j`)}(h list_headh]h list_head}(hj*hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj*ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj*modnameN classnameNjj)}j]j)c.list_is_firstasbuh1hhj)ubj)}(h h]h }(hj5*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)ubj2)}(hjh]h*}(hjC*hhhNhNubah}(h]h ]j=ah"]h$]h&]uh1j1hj)ubj`)}(hheadh]hhead}(hjP*hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj)ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjH)ubeh}(h]h ]h"]h$]h&]hhuh1jhj)hhhj!)hMqubeh}(h]h ]h"]h$]h&]hhj~uh1jSjjhj )hhhj!)hMqubah}(h]j)ah ](jjeh"]h$]h&]jj)jhuh1jMhj!)hMqhj)hhubj)}(hhh]jL)}(hhh]jQ)}(h:tests whether **list** is the first entry in list **head**h]j)}(hj*h](htests whether }(hj*hhhNhNubj)}(h**list**h]hlist}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj*ubh is the first entry in list }(hj*hhhNhNubj)}(h**head**h]hhead}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj*ubeh}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMqhj}*ubah}(h]h ]h"]h$]h&]uh1jPhjz*hhhj*hNubah}(h]h ]h"]h$]h&]j-uh1jKhj*hMqhjw*hhubah}(h]h ]h"]h$]h&]uh1jhj)hhhj!)hMqubeh}(h]h ](jfunctioneh"]h$]h&]jjjj*jj*jjjuh1jHhhhj&hNhNubj)}(h}**Parameters** ``const struct list_head *list`` the entry to test ``const struct list_head *head`` the head of the listh](j)}(h**Parameters**h]j)}(hj*h]h Parameters}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj*ubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMuhj*ubj&)}(hhh](j+)}(h3``const struct list_head *list`` the entry to test h](j1)}(h ``const struct list_head *list``h]j$)}(hj*h]hconst struct list_head *list}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1j#hj*ubah}(h]h ]h"]h$]h&]uh1j0hS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMrhj*ubjK)}(hhh]j)}(hthe entry to testh]hthe entry to test}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj+hMrhj+ubah}(h]h ]h"]h$]h&]uh1jJhj*ubeh}(h]h ]h"]h$]h&]uh1j*hj+hMrhj*ubj+)}(h5``const struct list_head *head`` the head of the listh](j1)}(h ``const struct list_head *head``h]j$)}(hj'+h]hconst struct list_head *head}(hj)+hhhNhNubah}(h]h ]h"]h$]h&]uh1j#hj%+ubah}(h]h ]h"]h$]h&]uh1j0hS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMthj!+ubjK)}(hhh]j)}(hthe head of the listh]hthe head of the list}(hj@+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMshj=+ubah}(h]h ]h"]h$]h&]uh1jJhj!+ubeh}(h]h ]h"]h$]h&]uh1j*hj<+hMthj*ubeh}(h]h ]h"]h$]h&]uh1j%hj*ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj&hhhNhNubj8)}(hhh]h}(h]h ]h"]h$]h&]entries](jDlist_is_last (C function)c.list_is_lasthNtauh1j7hj&hhhNhNubjI)}(hhh](jN)}(hMint list_is_last (const struct list_head *list, const struct list_head *head)h]jT)}(hLint list_is_last(const struct list_head *list, const struct list_head *head)h](j)}(hinth]hint}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}+hhhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhM{ubj)}(h h]h }(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}+hhhj+hM{ubjZ)}(h list_is_lasth]j`)}(h list_is_lasth]h list_is_last}(hj+hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj+ubah}(h]h ](jrjseh"]h$]h&]hhuh1jYhj}+hhhj+hM{ubj)}(h<(const struct list_head *list, const struct list_head *head)h](j)}(hconst struct list_head *listh](j)}(hjR)h]hconst}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubj)}(h h]h }(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubj)}(hjh]hstruct}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubj)}(h h]h }(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubh)}(hhh]j`)}(h list_headh]h list_head}(hj+hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj+ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj+modnameN classnameNjj)}j]j)}jj+sbc.list_is_lastasbuh1hhj+ubj)}(h h]h }(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubj2)}(hjh]h*}(hj%,hhhNhNubah}(h]h ]j=ah"]h$]h&]uh1j1hj+ubj`)}(hlisth]hlist}(hj2,hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj+ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj+ubj)}(hconst struct list_head *headh](j)}(hjR)h]hconst}(hjK,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjG,ubj)}(h h]h }(hjX,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjG,ubj)}(hjh]hstruct}(hjf,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjG,ubj)}(h h]h }(hjs,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjG,ubh)}(hhh]j`)}(h list_headh]h list_head}(hj,hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj,ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj,modnameN classnameNjj)}j]j,c.list_is_lastasbuh1hhjG,ubj)}(h h]h }(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjG,ubj2)}(hjh]h*}(hj,hhhNhNubah}(h]h ]j=ah"]h$]h&]uh1j1hjG,ubj`)}(hheadh]hhead}(hj,hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjG,ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj+ubeh}(h]h ]h"]h$]h&]hhuh1jhj}+hhhj+hM{ubeh}(h]h ]h"]h$]h&]hhj~uh1jSjjhjy+hhhj+hM{ubah}(h]jt+ah ](jjeh"]h$]h&]jj)jhuh1jMhj+hM{hjv+hhubj)}(hhh]j)}(h9tests whether **list** is the last entry in list **head**h](htests whether }(hj,hhhNhNubj)}(h**list**h]hlist}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,ubh is the last entry in list }(hj,hhhNhNubj)}(h**head**h]hhead}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,ubeh}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhM{hj,hhubah}(h]h ]h"]h$]h&]uh1jhjv+hhhj+hM{ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj-jj-jjjuh1jHhhhj&hNhNubj)}(h}**Parameters** ``const struct list_head *list`` the entry to test ``const struct list_head *head`` the head of the listh](j)}(h**Parameters**h]j)}(hj)-h]h Parameters}(hj+-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'-ubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhj#-ubj&)}(hhh](j+)}(h3``const struct list_head *list`` the entry to test h](j1)}(h ``const struct list_head *list``h]j$)}(hjH-h]hconst struct list_head *list}(hjJ-hhhNhNubah}(h]h ]h"]h$]h&]uh1j#hjF-ubah}(h]h ]h"]h$]h&]uh1j0hS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhM|hjB-ubjK)}(hhh]j)}(hthe entry to testh]hthe entry to test}(hja-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj]-hM|hj^-ubah}(h]h ]h"]h$]h&]uh1jJhjB-ubeh}(h]h ]h"]h$]h&]uh1j*hj]-hM|hj?-ubj+)}(h5``const struct list_head *head`` the head of the listh](j1)}(h ``const struct list_head *head``h]j$)}(hj-h]hconst struct list_head *head}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1j#hj-ubah}(h]h ]h"]h$]h&]uh1j0hS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhM~hj{-ubjK)}(hhh]j)}(hthe head of the listh]hthe head of the list}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhM}hj-ubah}(h]h ]h"]h$]h&]uh1jJhj{-ubeh}(h]h ]h"]h$]h&]uh1j*hj-hM~hj?-ubeh}(h]h ]h"]h$]h&]uh1j%hj#-ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj&hhhNhNubj8)}(hhh]h}(h]h ]h"]h$]h&]entries](jDlist_is_head (C function)c.list_is_headhNtauh1j7hj&hhhNhNubjI)}(hhh](jN)}(hMint list_is_head (const struct list_head *list, const struct list_head *head)h]jT)}(hLint list_is_head(const struct list_head *list, const struct list_head *head)h](j)}(hinth]hint}(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-hhhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMubj)}(h h]h }(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-hhhj-hMubjZ)}(h list_is_headh]j`)}(h list_is_headh]h list_is_head}(hj-hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj-ubah}(h]h ](jrjseh"]h$]h&]hhuh1jYhj-hhhj-hMubj)}(h<(const struct list_head *list, const struct list_head *head)h](j)}(hconst struct list_head *listh](j)}(hjR)h]hconst}(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.ubj)}(h h]h }(hj%.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.ubj)}(hjh]hstruct}(hj3.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.ubj)}(h h]h }(hj@.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.ubh)}(hhh]j`)}(h list_headh]h list_head}(hjQ.hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjN.ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjS.modnameN classnameNjj)}j]j)}jj-sbc.list_is_headasbuh1hhj.ubj)}(h h]h }(hjq.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.ubj2)}(hjh]h*}(hj.hhhNhNubah}(h]h ]j=ah"]h$]h&]uh1j1hj.ubj`)}(hlisth]hlist}(hj.hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj.ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj.ubj)}(hconst struct list_head *headh](j)}(hjR)h]hconst}(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.ubj)}(h h]h }(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.ubj)}(hjh]hstruct}(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.ubj)}(h h]h }(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.ubh)}(hhh]j`)}(h list_headh]h list_head}(hj.hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj.ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj.modnameN classnameNjj)}j]jm.c.list_is_headasbuh1hhj.ubj)}(h h]h }(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.ubj2)}(hjh]h*}(hj /hhhNhNubah}(h]h ]j=ah"]h$]h&]uh1j1hj.ubj`)}(hheadh]hhead}(hj/hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj.ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj.ubeh}(h]h ]h"]h$]h&]hhuh1jhj-hhhj-hMubeh}(h]h ]h"]h$]h&]hhj~uh1jSjjhj-hhhj-hMubah}(h]j-ah ](jjeh"]h$]h&]jj)jhuh1jMhj-hMhj-hhubj)}(hhh]j)}(h+tests whether **list** is the list **head**h](htests whether }(hjA/hhhNhNubj)}(h**list**h]hlist}(hjI/hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjA/ubh is the list }(hjA/hhhNhNubj)}(h**head**h]hhead}(hj[/hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjA/ubeh}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhj>/hhubah}(h]h ]h"]h$]h&]uh1jhj-hhhj-hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjy/jjy/jjjuh1jHhhhj&hNhNubj)}(h}**Parameters** ``const struct list_head *list`` the entry to test ``const struct list_head *head`` the head of the listh](j)}(h**Parameters**h]j)}(hj/h]h Parameters}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj/ubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhj}/ubj&)}(hhh](j+)}(h3``const struct list_head *list`` the entry to test h](j1)}(h ``const struct list_head *list``h]j$)}(hj/h]hconst struct list_head *list}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1j#hj/ubah}(h]h ]h"]h$]h&]uh1j0hS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhj/ubjK)}(hhh]j)}(hthe entry to testh]hthe entry to test}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/hMhj/ubah}(h]h ]h"]h$]h&]uh1jJhj/ubeh}(h]h ]h"]h$]h&]uh1j*hj/hMhj/ubj+)}(h5``const struct list_head *head`` the head of the listh](j1)}(h ``const struct list_head *head``h]j$)}(hj/h]hconst struct list_head *head}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1j#hj/ubah}(h]h ]h"]h$]h&]uh1j0hS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhj/ubjK)}(hhh]j)}(hthe head of the listh]hthe head of the list}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhj/ubah}(h]h ]h"]h$]h&]uh1jJhj/ubeh}(h]h ]h"]h$]h&]uh1j*hj/hMhj/ubeh}(h]h ]h"]h$]h&]uh1j%hj}/ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj&hhhNhNubj8)}(hhh]h}(h]h ]h"]h$]h&]entries](jDlist_empty (C function) c.list_emptyhNtauh1j7hj&hhhNhNubjI)}(hhh](jN)}(h-int list_empty (const struct list_head *head)h]jT)}(h,int list_empty(const struct list_head *head)h](j)}(hinth]hint}(hj50hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj10hhhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMubj)}(h h]h }(hjD0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj10hhhjC0hMubjZ)}(h list_emptyh]j`)}(h list_emptyh]h list_empty}(hjV0hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjR0ubah}(h]h ](jrjseh"]h$]h&]hhuh1jYhj10hhhjC0hMubj)}(h(const struct list_head *head)h]j)}(hconst struct list_head *headh](j)}(hjR)h]hconst}(hjr0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjn0ubj)}(h h]h }(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjn0ubj)}(hjh]hstruct}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjn0ubj)}(h h]h }(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjn0ubh)}(hhh]j`)}(h list_headh]h list_head}(hj0hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj0ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj0modnameN classnameNjj)}j]j)}jjX0sb c.list_emptyasbuh1hhjn0ubj)}(h h]h }(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjn0ubj2)}(hjh]h*}(hj0hhhNhNubah}(h]h ]j=ah"]h$]h&]uh1j1hjn0ubj`)}(hheadh]hhead}(hj0hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjn0ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjj0ubah}(h]h ]h"]h$]h&]hhuh1jhj10hhhjC0hMubeh}(h]h ]h"]h$]h&]hhj~uh1jSjjhj-0hhhjC0hMubah}(h]j(0ah ](jjeh"]h$]h&]jj)jhuh1jMhjC0hMhj*0hhubj)}(hhh]j)}(htests whether a list is emptyh]htests whether a list is empty}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhj 1hhubah}(h]h ]h"]h$]h&]uh1jhj*0hhhjC0hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj(1jj(1jjjuh1jHhhhj&hNhNubj)}(hD**Parameters** ``const struct list_head *head`` the list to test.h](j)}(h**Parameters**h]j)}(hj21h]h Parameters}(hj41hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj01ubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhj,1ubj&)}(hhh]j+)}(h2``const struct list_head *head`` the list to test.h](j1)}(h ``const struct list_head *head``h]j$)}(hjQ1h]hconst struct list_head *head}(hjS1hhhNhNubah}(h]h ]h"]h$]h&]uh1j#hjO1ubah}(h]h ]h"]h$]h&]uh1j0hS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhjK1ubjK)}(hhh]j)}(hthe list to test.h]hthe list to test.}(hjj1hhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhjg1ubah}(h]h ]h"]h$]h&]uh1jJhjK1ubeh}(h]h ]h"]h$]h&]uh1j*hjf1hMhjH1ubah}(h]h ]h"]h$]h&]uh1j%hj,1ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj&hhhNhNubj8)}(hhh]h}(h]h ]h"]h$]h&]entries](jD"list_del_init_careful (C function)c.list_del_init_carefulhNtauh1j7hj&hhhNhNubjI)}(hhh](jN)}(h4void list_del_init_careful (struct list_head *entry)h]jT)}(h3void list_del_init_careful(struct list_head *entry)h](j)}(hvoidh]hvoid}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1hhhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMubj)}(h h]h }(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1hhhj1hMubjZ)}(hlist_del_init_carefulh]j`)}(hlist_del_init_carefulh]hlist_del_init_careful}(hj1hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj1ubah}(h]h ](jrjseh"]h$]h&]hhuh1jYhj1hhhj1hMubj)}(h(struct list_head *entry)h]j)}(hstruct list_head *entryh](j)}(hjh]hstruct}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1ubj)}(h h]h }(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1ubh)}(hhh]j`)}(h list_headh]h list_head}(hj2hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj2ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj2modnameN classnameNjj)}j]j)}jj1sbc.list_del_init_carefulasbuh1hhj1ubj)}(h h]h }(hj&2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1ubj2)}(hjh]h*}(hj42hhhNhNubah}(h]h ]j=ah"]h$]h&]uh1j1hj1ubj`)}(hentryh]hentry}(hjA2hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj1ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj1ubah}(h]h ]h"]h$]h&]hhuh1jhj1hhhj1hMubeh}(h]h ]h"]h$]h&]hhj~uh1jSjjhj1hhhj1hMubah}(h]j1ah ](jjeh"]h$]h&]jj)jhuh1jMhj1hMhj1hhubj)}(hhh]j)}(h,deletes entry from list and reinitialize it.h]h,deletes entry from list and reinitialize it.}(hjk2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhjh2hhubah}(h]h ]h"]h$]h&]uh1jhj1hhhj1hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj2jj2jjjuh1jHhhhj&hNhNubj)}(hX**Parameters** ``struct list_head *entry`` the element to delete from the list. **Description** This is the same as list_del_init(), except designed to be used together with list_empty_careful() in a way to guarantee ordering of other memory operations. Any memory operations done before a list_del_init_careful() are guaranteed to be visible after a list_empty_careful() test.h](j)}(h**Parameters**h]j)}(hj2h]h Parameters}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2ubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhj2ubj&)}(hhh]j+)}(hA``struct list_head *entry`` the element to delete from the list. h](j1)}(h``struct list_head *entry``h]j$)}(hj2h]hstruct list_head *entry}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1j#hj2ubah}(h]h ]h"]h$]h&]uh1j0hS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhj2ubjK)}(hhh]j)}(h$the element to delete from the list.h]h$the element to delete from the list.}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj2hMhj2ubah}(h]h ]h"]h$]h&]uh1jJhj2ubeh}(h]h ]h"]h$]h&]uh1j*hj2hMhj2ubah}(h]h ]h"]h$]h&]uh1j%hj2ubj)}(h**Description**h]j)}(hj2h]h Description}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2ubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhj2ubj)}(hThis is the same as list_del_init(), except designed to be used together with list_empty_careful() in a way to guarantee ordering of other memory operations.h]hThis is the same as list_del_init(), except designed to be used together with list_empty_careful() in a way to guarantee ordering of other memory operations.}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhj2ubj)}(h{Any memory operations done before a list_del_init_careful() are guaranteed to be visible after a list_empty_careful() test.h]h{Any memory operations done before a list_del_init_careful() are guaranteed to be visible after a list_empty_careful() test.}(hj 3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhj2ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj&hhhNhNubj8)}(hhh]h}(h]h ]h"]h$]h&]entries](jDlist_empty_careful (C function)c.list_empty_carefulhNtauh1j7hj&hhhNhNubjI)}(hhh](jN)}(h5int list_empty_careful (const struct list_head *head)h]jT)}(h4int list_empty_careful(const struct list_head *head)h](j)}(hinth]hint}(hj;3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj73hhhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMubj)}(h h]h }(hjJ3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj73hhhjI3hMubjZ)}(hlist_empty_carefulh]j`)}(hlist_empty_carefulh]hlist_empty_careful}(hj\3hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjX3ubah}(h]h ](jrjseh"]h$]h&]hhuh1jYhj73hhhjI3hMubj)}(h(const struct list_head *head)h]j)}(hconst struct list_head *headh](j)}(hjR)h]hconst}(hjx3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjt3ubj)}(h h]h }(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjt3ubj)}(hjh]hstruct}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjt3ubj)}(h h]h }(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjt3ubh)}(hhh]j`)}(h list_headh]h list_head}(hj3hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj3ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj3modnameN classnameNjj)}j]j)}jj^3sbc.list_empty_carefulasbuh1hhjt3ubj)}(h h]h }(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjt3ubj2)}(hjh]h*}(hj3hhhNhNubah}(h]h ]j=ah"]h$]h&]uh1j1hjt3ubj`)}(hheadh]hhead}(hj3hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjt3ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjp3ubah}(h]h ]h"]h$]h&]hhuh1jhj73hhhjI3hMubeh}(h]h ]h"]h$]h&]hhj~uh1jSjjhj33hhhjI3hMubah}(h]j.3ah ](jjeh"]h$]h&]jj)jhuh1jMhjI3hMhj03hhubj)}(hhh]j)}(h4tests whether a list is empty and not being modifiedh]h4tests whether a list is empty and not being modified}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhj4hhubah}(h]h ]h"]h$]h&]uh1jhj03hhhjI3hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj.4jj.4jjjuh1jHhhhj&hNhNubj)}(hX**Parameters** ``const struct list_head *head`` the list to test **Description** tests whether a list is empty _and_ checks that no other CPU might be in the process of modifying either member (next or prev) **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.h](j)}(h**Parameters**h]j)}(hj84h]h Parameters}(hj:4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj64ubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhj24ubj&)}(hhh]j+)}(h2``const struct list_head *head`` the list to test h](j1)}(h ``const struct list_head *head``h]j$)}(hjW4h]hconst struct list_head *head}(hjY4hhhNhNubah}(h]h ]h"]h$]h&]uh1j#hjU4ubah}(h]h ]h"]h$]h&]uh1j0hS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhjQ4ubjK)}(hhh]j)}(hthe list to testh]hthe list to test}(hjp4hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjl4hMhjm4ubah}(h]h ]h"]h$]h&]uh1jJhjQ4ubeh}(h]h ]h"]h$]h&]uh1j*hjl4hMhjN4ubah}(h]h ]h"]h$]h&]uh1j%hj24ubj)}(h**Description**h]j)}(hj4h]h Description}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4ubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhj24ubj)}(h~tests whether a list is empty _and_ checks that no other CPU might be in the process of modifying either member (next or prev)h]h~tests whether a list is empty _and_ checks that no other CPU might be in the process of modifying either member (next or prev)}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhj24ubj)}(h**NOTE**h]j)}(hj4h]hNOTE}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4ubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhj24ubj)}(husing 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.h]husing 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.}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhj24ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj&hhhNhNubj8)}(hhh]h}(h]h ]h"]h$]h&]entries](jDlist_rotate_left (C function)c.list_rotate_lefthNtauh1j7hj&hhhNhNubjI)}(hhh](jN)}(h.void list_rotate_left (struct list_head *head)h]jT)}(h-void list_rotate_left(struct list_head *head)h](j)}(hvoidh]hvoid}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4hhhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMubj)}(h h]h }(hj 5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4hhhj 5hMubjZ)}(hlist_rotate_lefth]j`)}(hlist_rotate_lefth]hlist_rotate_left}(hj5hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj5ubah}(h]h ](jrjseh"]h$]h&]hhuh1jYhj4hhhj 5hMubj)}(h(struct list_head *head)h]j)}(hstruct list_head *headh](j)}(hjh]hstruct}(hj;5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj75ubj)}(h h]h }(hjH5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj75ubh)}(hhh]j`)}(h list_headh]h list_head}(hjY5hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjV5ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj[5modnameN classnameNjj)}j]j)}jj!5sbc.list_rotate_leftasbuh1hhj75ubj)}(h h]h }(hjy5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj75ubj2)}(hjh]h*}(hj5hhhNhNubah}(h]h ]j=ah"]h$]h&]uh1j1hj75ubj`)}(hheadh]hhead}(hj5hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj75ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj35ubah}(h]h ]h"]h$]h&]hhuh1jhj4hhhj 5hMubeh}(h]h ]h"]h$]h&]hhj~uh1jSjjhj4hhhj 5hMubah}(h]j4ah ](jjeh"]h$]h&]jj)jhuh1jMhj 5hMhj4hhubj)}(hhh]j)}(hrotate the list to the lefth]hrotate the list to the left}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhj5hhubah}(h]h ]h"]h$]h&]uh1jhj4hhhj 5hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj5jj5jjjuh1jHhhhj&hNhNubj)}(hA**Parameters** ``struct list_head *head`` the head of the listh](j)}(h**Parameters**h]j)}(hj5h]h Parameters}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5ubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhj5ubj&)}(hhh]j+)}(h/``struct list_head *head`` the head of the listh](j1)}(h``struct list_head *head``h]j$)}(hj5h]hstruct list_head *head}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1j#hj5ubah}(h]h ]h"]h$]h&]uh1j0hS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhj5ubjK)}(hhh]j)}(hthe head of the listh]hthe head of the list}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhj6ubah}(h]h ]h"]h$]h&]uh1jJhj5ubeh}(h]h ]h"]h$]h&]uh1j*hj6hMhj5ubah}(h]h ]h"]h$]h&]uh1j%hj5ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj&hhhNhNubj8)}(hhh]h}(h]h ]h"]h$]h&]entries](jD!list_rotate_to_front (C function)c.list_rotate_to_fronthNtauh1j7hj&hhhNhNubjI)}(hhh](jN)}(hJvoid list_rotate_to_front (struct list_head *list, struct list_head *head)h]jT)}(hIvoid list_rotate_to_front(struct list_head *list, struct list_head *head)h](j)}(hvoidh]hvoid}(hjY6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjU6hhhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMubj)}(h h]h }(hjh6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjU6hhhjg6hMubjZ)}(hlist_rotate_to_fronth]j`)}(hlist_rotate_to_fronth]hlist_rotate_to_front}(hjz6hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjv6ubah}(h]h ](jrjseh"]h$]h&]hhuh1jYhjU6hhhjg6hMubj)}(h0(struct list_head *list, struct list_head *head)h](j)}(hstruct list_head *listh](j)}(hjh]hstruct}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubj)}(h h]h }(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubh)}(hhh]j`)}(h list_headh]h list_head}(hj6hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj6ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj6modnameN classnameNjj)}j]j)}jj|6sbc.list_rotate_to_frontasbuh1hhj6ubj)}(h h]h }(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubj2)}(hjh]h*}(hj6hhhNhNubah}(h]h ]j=ah"]h$]h&]uh1j1hj6ubj`)}(hlisth]hlist}(hj6hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj6ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj6ubj)}(hstruct list_head *headh](j)}(hjh]hstruct}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7ubj)}(h h]h }(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7ubh)}(hhh]j`)}(h list_headh]h list_head}(hj&7hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj#7ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj(7modnameN classnameNjj)}j]j6c.list_rotate_to_frontasbuh1hhj7ubj)}(h h]h }(hjD7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7ubj2)}(hjh]h*}(hjR7hhhNhNubah}(h]h ]j=ah"]h$]h&]uh1j1hj7ubj`)}(hheadh]hhead}(hj_7hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj7ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj6ubeh}(h]h ]h"]h$]h&]hhuh1jhjU6hhhjg6hMubeh}(h]h ]h"]h$]h&]hhj~uh1jSjjhjQ6hhhjg6hMubah}(h]jL6ah ](jjeh"]h$]h&]jj)jhuh1jMhjg6hMhjN6hhubj)}(hhh]j)}(hRotate list to specific item.h]hRotate list to specific item.}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhj7hhubah}(h]h ]h"]h$]h&]uh1jhjN6hhhjg6hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj7jj7jjjuh1jHhhhj&hNhNubj)}(h**Parameters** ``struct list_head *list`` The desired new front of the list. ``struct list_head *head`` The head of the list. **Description** Rotates list so that **list** becomes the new front of the list.h](j)}(h**Parameters**h]j)}(hj7h]h Parameters}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj7ubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhj7ubj&)}(hhh](j+)}(h>``struct list_head *list`` The desired new front of the list. h](j1)}(h``struct list_head *list``h]j$)}(hj7h]hstruct list_head *list}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1j#hj7ubah}(h]h ]h"]h$]h&]uh1j0hS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhj7ubjK)}(hhh]j)}(h"The desired new front of the list.h]h"The desired new front of the list.}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj7hMhj7ubah}(h]h ]h"]h$]h&]uh1jJhj7ubeh}(h]h ]h"]h$]h&]uh1j*hj7hMhj7ubj+)}(h1``struct list_head *head`` The head of the list. h](j1)}(h``struct list_head *head``h]j$)}(hj8h]hstruct list_head *head}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1j#hj8ubah}(h]h ]h"]h$]h&]uh1j0hS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhj7ubjK)}(hhh]j)}(hThe head of the list.h]hThe head of the list.}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj8hMhj8ubah}(h]h ]h"]h$]h&]uh1jJhj7ubeh}(h]h ]h"]h$]h&]uh1j*hj8hMhj7ubeh}(h]h ]h"]h$]h&]uh1j%hj7ubj)}(h**Description**h]j)}(hj>8h]h Description}(hj@8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj<8ubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhj7ubj)}(h@Rotates list so that **list** becomes the new front of the list.h](hRotates list so that }(hjT8hhhNhNubj)}(h**list**h]hlist}(hj\8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjT8ubh# becomes the new front of the list.}(hjT8hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhj7ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj&hhhNhNubj8)}(hhh]h}(h]h ]h"]h$]h&]entries](jDlist_is_singular (C function)c.list_is_singularhNtauh1j7hj&hhhNhNubjI)}(hhh](jN)}(h3int list_is_singular (const struct list_head *head)h]jT)}(h2int list_is_singular(const struct list_head *head)h](j)}(hinth]hint}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8hhhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMubj)}(h h]h }(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8hhhj8hMubjZ)}(hlist_is_singularh]j`)}(hlist_is_singularh]hlist_is_singular}(hj8hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj8ubah}(h]h ](jrjseh"]h$]h&]hhuh1jYhj8hhhj8hMubj)}(h(const struct list_head *head)h]j)}(hconst struct list_head *headh](j)}(hjR)h]hconst}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubj)}(h h]h }(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubj)}(hjh]hstruct}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubj)}(h h]h }(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubh)}(hhh]j`)}(h list_headh]h list_head}(hj 9hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj9ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj 9modnameN classnameNjj)}j]j)}jj8sbc.list_is_singularasbuh1hhj8ubj)}(h h]h }(hj+9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubj2)}(hjh]h*}(hj99hhhNhNubah}(h]h ]j=ah"]h$]h&]uh1j1hj8ubj`)}(hheadh]hhead}(hjF9hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj8ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj8ubah}(h]h ]h"]h$]h&]hhuh1jhj8hhhj8hMubeh}(h]h ]h"]h$]h&]hhj~uh1jSjjhj8hhhj8hMubah}(h]j8ah ](jjeh"]h$]h&]jj)jhuh1jMhj8hMhj8hhubj)}(hhh]j)}(h(tests whether a list has just one entry.h]h(tests whether a list has just one entry.}(hjp9hhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhjm9hhubah}(h]h ]h"]h$]h&]uh1jhj8hhhj8hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj9jj9jjjuh1jHhhhj&hNhNubj)}(hD**Parameters** ``const struct list_head *head`` the list to test.h](j)}(h**Parameters**h]j)}(hj9h]h Parameters}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9ubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhj9ubj&)}(hhh]j+)}(h2``const struct list_head *head`` the list to test.h](j1)}(h ``const struct list_head *head``h]j$)}(hj9h]hconst struct list_head *head}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1j#hj9ubah}(h]h ]h"]h$]h&]uh1j0hS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhj9ubjK)}(hhh]j)}(hthe list to test.h]hthe list to test.}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhj9ubah}(h]h ]h"]h$]h&]uh1jJhj9ubeh}(h]h ]h"]h$]h&]uh1j*hj9hMhj9ubah}(h]h ]h"]h$]h&]uh1j%hj9ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj&hhhNhNubj8)}(hhh]h}(h]h ]h"]h$]h&]entries](jDlist_cut_position (C function)c.list_cut_positionhNtauh1j7hj&hhhNhNubjI)}(hhh](jN)}(h`void list_cut_position (struct list_head *list, struct list_head *head, struct list_head *entry)h]jT)}(h_void list_cut_position(struct list_head *list, struct list_head *head, struct list_head *entry)h](j)}(hvoidh]hvoid}(hj :hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:hhhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMubj)}(h h]h }(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:hhhj:hMubjZ)}(hlist_cut_positionh]j`)}(hlist_cut_positionh]hlist_cut_position}(hj,:hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj(:ubah}(h]h ](jrjseh"]h$]h&]hhuh1jYhj:hhhj:hMubj)}(hI(struct list_head *list, struct list_head *head, struct list_head *entry)h](j)}(hstruct list_head *listh](j)}(hjh]hstruct}(hjH:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjD:ubj)}(h h]h }(hjU:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjD:ubh)}(hhh]j`)}(h list_headh]h list_head}(hjf:hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjc:ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjh:modnameN classnameNjj)}j]j)}jj.:sbc.list_cut_positionasbuh1hhjD:ubj)}(h h]h }(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjD:ubj2)}(hjh]h*}(hj:hhhNhNubah}(h]h ]j=ah"]h$]h&]uh1j1hjD:ubj`)}(hlisth]hlist}(hj:hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjD:ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj@:ubj)}(hstruct list_head *headh](j)}(hjh]hstruct}(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:ubj)}(h h]h }(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:ubh)}(hhh]j`)}(h list_headh]h list_head}(hj:hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj:ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj:modnameN classnameNjj)}j]j:c.list_cut_positionasbuh1hhj:ubj)}(h h]h }(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:ubj2)}(hjh]h*}(hj;hhhNhNubah}(h]h ]j=ah"]h$]h&]uh1j1hj:ubj`)}(hheadh]hhead}(hj;hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj:ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj@:ubj)}(hstruct list_head *entryh](j)}(hjh]hstruct}(hj*;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&;ubj)}(h h]h }(hj7;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&;ubh)}(hhh]j`)}(h list_headh]h list_head}(hjH;hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjE;ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjJ;modnameN classnameNjj)}j]j:c.list_cut_positionasbuh1hhj&;ubj)}(h h]h }(hjf;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&;ubj2)}(hjh]h*}(hjt;hhhNhNubah}(h]h ]j=ah"]h$]h&]uh1j1hj&;ubj`)}(hentryh]hentry}(hj;hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj&;ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj@:ubeh}(h]h ]h"]h$]h&]hhuh1jhj:hhhj:hMubeh}(h]h ]h"]h$]h&]hhj~uh1jSjjhj:hhhj:hMubah}(h]j9ah ](jjeh"]h$]h&]jj)jhuh1jMhj:hMhj:hhubj)}(hhh]j)}(hcut a list into twoh]hcut a list into two}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhj;hhubah}(h]h ]h"]h$]h&]uh1jhj:hhhj:hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj;jj;jjjuh1jHhhhj&hNhNubj)}(hX**Parameters** ``struct list_head *list`` a new list to add all removed entries ``struct list_head *head`` a list with entries ``struct list_head *entry`` an entry within head, could be the head itself and if so we won't cut the list **Description** This helper moves the initial part of **head**, up to and including **entry**, from **head** to **list**. You should pass on **entry** an element you know is on **head**. **list** should be an empty list or a list you do not care about losing its data.h](j)}(h**Parameters**h]j)}(hj;h]h Parameters}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj;ubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhj;ubj&)}(hhh](j+)}(hA``struct list_head *list`` a new list to add all removed entries h](j1)}(h``struct list_head *list``h]j$)}(hj;h]hstruct list_head *list}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1j#hj;ubah}(h]h ]h"]h$]h&]uh1j0hS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhj;ubjK)}(hhh]j)}(h%a new list to add all removed entriesh]h%a new list to add all removed entries}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj<hMhj<ubah}(h]h ]h"]h$]h&]uh1jJhj;ubeh}(h]h ]h"]h$]h&]uh1j*hj<hMhj;ubj+)}(h/``struct list_head *head`` a list with entries h](j1)}(h``struct list_head *head``h]j$)}(hj%<h]hstruct list_head *head}(hj'<hhhNhNubah}(h]h ]h"]h$]h&]uh1j#hj#<ubah}(h]h ]h"]h$]h&]uh1j0hS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhj<ubjK)}(hhh]j)}(ha list with entriesh]ha list with entries}(hj><hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj:<hMhj;<ubah}(h]h ]h"]h$]h&]uh1jJhj<ubeh}(h]h ]h"]h$]h&]uh1j*hj:<hMhj;ubj+)}(hk``struct list_head *entry`` an entry within head, could be the head itself and if so we won't cut the list h](j1)}(h``struct list_head *entry``h]j$)}(hj^<h]hstruct list_head *entry}(hj`<hhhNhNubah}(h]h ]h"]h$]h&]uh1j#hj\<ubah}(h]h ]h"]h$]h&]uh1j0hS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhjX<ubjK)}(hhh]j)}(hNan entry within head, could be the head itself and if so we won't cut the listh]hPan entry within head, could be the head itself and if so we won’t cut the list}(hjw<hhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhjt<ubah}(h]h ]h"]h$]h&]uh1jJhjX<ubeh}(h]h ]h"]h$]h&]uh1j*hjs<hMhj;ubeh}(h]h ]h"]h$]h&]uh1j%hj;ubj)}(h**Description**h]j)}(hj<h]h Description}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj<ubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhj;ubj)}(hThis helper moves the initial part of **head**, up to and including **entry**, from **head** to **list**. You should pass on **entry** an element you know is on **head**. **list** should be an empty list or a list you do not care about losing its data.h](h&This helper moves the initial part of }(hj<hhhNhNubj)}(h**head**h]hhead}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj<ubh, up to and including }(hj<hhhNhNubj)}(h **entry**h]hentry}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj<ubh, from }(hj<hhhNhNubj)}(h**head**h]hhead}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj<ubh to }(hj<hhhNhNubj)}(h**list**h]hlist}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj<ubh. You should pass on }(hj<hhhNhNubj)}(h **entry**h]hentry}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj<ubh an element you know is on }(hj<hhhNhNubj)}(h**head**h]hhead}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj<ubh. }(hj<hhhNhNubj)}(h**list**h]hlist}(hj$=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj<ubhI should be an empty list or a list you do not care about losing its data.}(hj<hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhj;ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj&hhhNhNubj8)}(hhh]h}(h]h ]h"]h$]h&]entries](jDlist_cut_before (C function)c.list_cut_beforehNtauh1j7hj&hhhNhNubjI)}(hhh](jN)}(h^void list_cut_before (struct list_head *list, struct list_head *head, struct list_head *entry)h]jT)}(h]void list_cut_before(struct list_head *list, struct list_head *head, struct list_head *entry)h](j)}(hvoidh]hvoid}(hj]=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjY=hhhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhM ubj)}(h h]h }(hjl=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjY=hhhjk=hM ubjZ)}(hlist_cut_beforeh]j`)}(hlist_cut_beforeh]hlist_cut_before}(hj~=hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjz=ubah}(h]h ](jrjseh"]h$]h&]hhuh1jYhjY=hhhjk=hM ubj)}(hI(struct list_head *list, struct list_head *head, struct list_head *entry)h](j)}(hstruct list_head *listh](j)}(hjh]hstruct}(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=ubj)}(h h]h }(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=ubh)}(hhh]j`)}(h list_headh]h list_head}(hj=hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj=ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj=modnameN classnameNjj)}j]j)}jj=sbc.list_cut_beforeasbuh1hhj=ubj)}(h h]h }(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=ubj2)}(hjh]h*}(hj=hhhNhNubah}(h]h ]j=ah"]h$]h&]uh1j1hj=ubj`)}(hlisth]hlist}(hj=hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj=ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj=ubj)}(hstruct list_head *headh](j)}(hjh]hstruct}(hj >hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>ubj)}(h h]h }(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>ubh)}(hhh]j`)}(h list_headh]h list_head}(hj*>hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj'>ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj,>modnameN classnameNjj)}j]j=c.list_cut_beforeasbuh1hhj>ubj)}(h h]h }(hjH>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>ubj2)}(hjh]h*}(hjV>hhhNhNubah}(h]h ]j=ah"]h$]h&]uh1j1hj>ubj`)}(hheadh]hhead}(hjc>hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj>ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj=ubj)}(hstruct list_head *entryh](j)}(hjh]hstruct}(hj|>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjx>ubj)}(h h]h }(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjx>ubh)}(hhh]j`)}(h list_headh]h list_head}(hj>hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj>ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj>modnameN classnameNjj)}j]j=c.list_cut_beforeasbuh1hhjx>ubj)}(h h]h }(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjx>ubj2)}(hjh]h*}(hj>hhhNhNubah}(h]h ]j=ah"]h$]h&]uh1j1hjx>ubj`)}(hentryh]hentry}(hj>hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjx>ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj=ubeh}(h]h ]h"]h$]h&]hhuh1jhjY=hhhjk=hM ubeh}(h]h ]h"]h$]h&]hhj~uh1jSjjhjU=hhhjk=hM ubah}(h]jP=ah ](jjeh"]h$]h&]jj)jhuh1jMhjk=hM hjR=hhubj)}(hhh]j)}(h'cut a list into two, before given entryh]h'cut a list into two, before given entry}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhM hj>hhubah}(h]h ]h"]h$]h&]uh1jhjR=hhhjk=hM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj?jj?jjjuh1jHhhhj&hNhNubj)}(hX,**Parameters** ``struct list_head *list`` a new list to add all removed entries ``struct list_head *head`` a list with entries ``struct list_head *entry`` an entry within head, could be the head itself **Description** This helper moves the initial part of **head**, up to but excluding **entry**, from **head** to **list**. You should pass in **entry** an element you know is on **head**. **list** should be an empty list or a list you do not care about losing its data. If **entry** == **head**, all entries on **head** are moved to **list**.h](j)}(h**Parameters**h]j)}(hj?h]h Parameters}(hj!?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj?ubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhj?ubj&)}(hhh](j+)}(hA``struct list_head *list`` a new list to add all removed entries h](j1)}(h``struct list_head *list``h]j$)}(hj>?h]hstruct list_head *list}(hj@?hhhNhNubah}(h]h ]h"]h$]h&]uh1j#hjBhhubah}(h]h ]h"]h$]h&]uh1jhj@hhhjAhM9ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjYBjjYBjjjuh1jHhhhj&hNhNubj)}(h**Parameters** ``const struct list_head *list`` the new list to add. ``struct list_head *head`` the place to add it in the first list.h](j)}(h**Parameters**h]j)}(hjcBh]h Parameters}(hjeBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjaBubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhM=hj]Bubj&)}(hhh](j+)}(h6``const struct list_head *list`` the new list to add. h](j1)}(h ``const struct list_head *list``h]j$)}(hjBh]hconst struct list_head *list}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1j#hjBubah}(h]h ]h"]h$]h&]uh1j0hS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhM:hj|BubjK)}(hhh]j)}(hthe new list to add.h]hthe new list to add.}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjBhM:hjBubah}(h]h ]h"]h$]h&]uh1jJhj|Bubeh}(h]h ]h"]h$]h&]uh1j*hjBhM:hjyBubj+)}(hA``struct list_head *head`` the place to add it in the first list.h](j1)}(h``struct list_head *head``h]j$)}(hjBh]hstruct list_head *head}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1j#hjBubah}(h]h ]h"]h$]h&]uh1j0hS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhM<hjBubjK)}(hhh]j)}(h&the place to add it in the first list.h]h&the place to add it in the first list.}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhM;hjBubah}(h]h ]h"]h$]h&]uh1jJhjBubeh}(h]h ]h"]h$]h&]uh1j*hjBhM<hjyBubeh}(h]h ]h"]h$]h&]uh1j%hj]Bubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj&hhhNhNubj8)}(hhh]h}(h]h ]h"]h$]h&]entries](jDlist_splice_tail (C function)c.list_splice_tailhNtauh1j7hj&hhhNhNubjI)}(hhh](jN)}(hFvoid list_splice_tail (struct list_head *list, struct list_head *head)h]jT)}(hEvoid list_splice_tail(struct list_head *list, struct list_head *head)h](j)}(hvoidh]hvoid}(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjChhhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMEubj)}(h h]h }(hj$ChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjChhhj#ChMEubjZ)}(hlist_splice_tailh]j`)}(hlist_splice_tailh]hlist_splice_tail}(hj6ChhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj2Cubah}(h]h ](jrjseh"]h$]h&]hhuh1jYhjChhhj#ChMEubj)}(h0(struct list_head *list, struct list_head *head)h](j)}(hstruct list_head *listh](j)}(hjh]hstruct}(hjRChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNCubj)}(h h]h }(hj_ChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNCubh)}(hhh]j`)}(h list_headh]h list_head}(hjpChhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjmCubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjrCmodnameN classnameNjj)}j]j)}jj8Csbc.list_splice_tailasbuh1hhjNCubj)}(h h]h }(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNCubj2)}(hjh]h*}(hjChhhNhNubah}(h]h ]j=ah"]h$]h&]uh1j1hjNCubj`)}(hlisth]hlist}(hjChhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjNCubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjJCubj)}(hstruct list_head *headh](j)}(hjh]hstruct}(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjCubj)}(h h]h }(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjCubh)}(hhh]j`)}(h list_headh]h list_head}(hjChhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjCubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjCmodnameN classnameNjj)}j]jCc.list_splice_tailasbuh1hhjCubj)}(h h]h }(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjCubj2)}(hjh]h*}(hjDhhhNhNubah}(h]h ]j=ah"]h$]h&]uh1j1hjCubj`)}(hheadh]hhead}(hjDhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjCubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjJCubeh}(h]h ]h"]h$]h&]hhuh1jhjChhhj#ChMEubeh}(h]h ]h"]h$]h&]hhj~uh1jSjjhj Chhhj#ChMEubah}(h]jCah ](jjeh"]h$]h&]jj)jhuh1jMhj#ChMEhj Chhubj)}(hhh]j)}(h'join two lists, each list being a queueh]h'join two lists, each list being a queue}(hjEDhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMEhjBDhhubah}(h]h ]h"]h$]h&]uh1jhj Chhhj#ChMEubeh}(h]h ](jfunctioneh"]h$]h&]jjjj]Djj]Djjjuh1jHhhhj&hNhNubj)}(h**Parameters** ``struct list_head *list`` the new list to add. ``struct list_head *head`` the place to add it in the first list.h](j)}(h**Parameters**h]j)}(hjgDh]h Parameters}(hjiDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjeDubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMIhjaDubj&)}(hhh](j+)}(h0``struct list_head *list`` the new list to add. h](j1)}(h``struct list_head *list``h]j$)}(hjDh]hstruct list_head *list}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1j#hjDubah}(h]h ]h"]h$]h&]uh1j0hS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMFhjDubjK)}(hhh]j)}(hthe new list to add.h]hthe new list to add.}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjDhMFhjDubah}(h]h ]h"]h$]h&]uh1jJhjDubeh}(h]h ]h"]h$]h&]uh1j*hjDhMFhj}Dubj+)}(hA``struct list_head *head`` the place to add it in the first list.h](j1)}(h``struct list_head *head``h]j$)}(hjDh]hstruct list_head *head}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1j#hjDubah}(h]h ]h"]h$]h&]uh1j0hS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMHhjDubjK)}(hhh]j)}(h&the place to add it in the first list.h]h&the place to add it in the first list.}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMGhjDubah}(h]h ]h"]h$]h&]uh1jJhjDubeh}(h]h ]h"]h$]h&]uh1j*hjDhMHhj}Dubeh}(h]h ]h"]h$]h&]uh1j%hjaDubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj&hhhNhNubj8)}(hhh]h}(h]h ]h"]h$]h&]entries](jDlist_splice_init (C function)c.list_splice_inithNtauh1j7hj&hhhNhNubjI)}(hhh](jN)}(hFvoid list_splice_init (struct list_head *list, struct list_head *head)h]jT)}(hEvoid list_splice_init(struct list_head *list, struct list_head *head)h](j)}(hvoidh]hvoid}(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEhhhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMQubj)}(h h]h }(hj(EhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEhhhj'EhMQubjZ)}(hlist_splice_inith]j`)}(hlist_splice_inith]hlist_splice_init}(hj:EhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj6Eubah}(h]h ](jrjseh"]h$]h&]hhuh1jYhjEhhhj'EhMQubj)}(h0(struct list_head *list, struct list_head *head)h](j)}(hstruct list_head *listh](j)}(hjh]hstruct}(hjVEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjREubj)}(h h]h }(hjcEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjREubh)}(hhh]j`)}(h list_headh]h list_head}(hjtEhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjqEubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjvEmodnameN classnameNjj)}j]j)}jj` pointer. ``type`` the type of the struct this is embedded in. ``member`` the name of the list_head within the struct.h](j)}(h**Parameters**h]j)}(hjIh]h Parameters}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjIubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMvhjIubj&)}(hhh](j+)}(h<``ptr`` the :c:type:`struct list_head ` pointer. h](j1)}(h``ptr``h]j$)}(hjJh]hptr}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1j#hjJubah}(h]h ]h"]h$]h&]uh1j0hS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMshjJubjK)}(hhh]j)}(h3the :c:type:`struct list_head ` pointer.h](hthe }(hj4JhhhNhNubh)}(h&:c:type:`struct list_head `h]j$)}(hj>Jh]hstruct list_head}(hj@JhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1j#hjKubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhM}hj&hhubj)}(h"get the first element from a list h]j)}(h!get the first element from a listh]h!get the first element from a list}(hjZKhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhM{hjVKubah}(h]h ]h"]h$]h&]uh1jhjhKhM{hj&hhubj)}(h**Parameters** ``ptr`` the list head to take the element from. ``type`` the type of the struct this is embedded in. ``member`` the name of the list_head within the struct. **Description** Note, that list is expected to be not empty.h](j)}(h**Parameters**h]j)}(hjuKh]h Parameters}(hjwKhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjsKubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhjoKubj&)}(hhh](j+)}(h0``ptr`` the list head to take the element from. h](j1)}(h``ptr``h]j$)}(hjKh]hptr}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1j#hjKubah}(h]h ]h"]h$]h&]uh1j0hS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhM|hjKubjK)}(hhh]j)}(h'the list head to take the element from.h]h'the list head to take the element from.}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjKhM|hjKubah}(h]h ]h"]h$]h&]uh1jJhjKubeh}(h]h ]h"]h$]h&]uh1j*hjKhM|hjKubj+)}(h5``type`` the type of the struct this is embedded in. h](j1)}(h``type``h]j$)}(hjKh]htype}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1j#hjKubah}(h]h ]h"]h$]h&]uh1j0hS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhM}hjKubjK)}(hhh]j)}(h+the type of the struct this is embedded in.h]h+the type of the struct this is embedded in.}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjKhM}hjKubah}(h]h ]h"]h$]h&]uh1jJhjKubeh}(h]h ]h"]h$]h&]uh1j*hjKhM}hjKubj+)}(h8``member`` the name of the list_head within the struct. h](j1)}(h ``member``h]j$)}(hjLh]hmember}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1j#hjLubah}(h]h ]h"]h$]h&]uh1j0hS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhM~hjLubjK)}(hhh]j)}(h,the name of the list_head within the struct.h]h,the name of the list_head within the struct.}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjLhM~hjLubah}(h]h ]h"]h$]h&]uh1jJhjLubeh}(h]h ]h"]h$]h&]uh1j*hjLhM~hjKubeh}(h]h ]h"]h$]h&]uh1j%hjoKubj)}(h**Description**h]j)}(hjALh]h Description}(hjCLhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj?Lubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhjoKubj)}(h,Note, that list is expected to be not empty.h]h,Note, that list is expected to be not empty.}(hjWLhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhjoKubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj&hhhNhNubj8)}(hhh]h}(h]h ]h"]h$]h&]entries](jDlist_last_entry (C macro)c.list_last_entryhNtauh1j7hj&hhhNhNubjI)}(hhh](jN)}(hlist_last_entryh]jT)}(hlist_last_entryh]jZ)}(hlist_last_entryh]j`)}(hjLh]hlist_last_entry}(hjLhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjLubah}(h]h ](jrjseh"]h$]h&]hhuh1jYhjLhhhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMubah}(h]h ]h"]h$]h&]hhj~uh1jSjjhj~LhhhjLhMubah}(h]jyLah ](jjeh"]h$]h&]jj)jhuh1jMhjLhMhj{Lhhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhj{LhhhjLhMubeh}(h]h ](jmacroeh"]h$]h&]jjjjLjjLjjjuh1jHhhhj&hNhNubj)}(h'``list_last_entry (ptr, type, member)``h]j$)}(hjLh]h#list_last_entry (ptr, type, member)}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1j#hjLubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhj&hhubj)}(h!get the last element from a list h]j)}(h get the last element from a listh]h get the last element from a list}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhjLubah}(h]h ]h"]h$]h&]uh1jhjLhMhj&hhubj)}(h**Parameters** ``ptr`` the list head to take the element from. ``type`` the type of the struct this is embedded in. ``member`` the name of the list_head within the struct. **Description** Note, that list is expected to be not empty.h](j)}(h**Parameters**h]j)}(hjLh]h Parameters}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjLubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhjLubj&)}(hhh](j+)}(h0``ptr`` the list head to take the element from. h](j1)}(h``ptr``h]j$)}(hjMh]hptr}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1j#hjMubah}(h]h ]h"]h$]h&]uh1j0hS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhj MubjK)}(hhh]j)}(h'the list head to take the element from.h]h'the list head to take the element from.}(hj)MhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj%MhMhj&Mubah}(h]h ]h"]h$]h&]uh1jJhj Mubeh}(h]h ]h"]h$]h&]uh1j*hj%MhMhjMubj+)}(h5``type`` the type of the struct this is embedded in. h](j1)}(h``type``h]j$)}(hjIMh]htype}(hjKMhhhNhNubah}(h]h ]h"]h$]h&]uh1j#hjGMubah}(h]h ]h"]h$]h&]uh1j0hS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhjCMubjK)}(hhh]j)}(h+the type of the struct this is embedded in.h]h+the type of the struct this is embedded in.}(hjbMhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj^MhMhj_Mubah}(h]h ]h"]h$]h&]uh1jJhjCMubeh}(h]h ]h"]h$]h&]uh1j*hj^MhMhjMubj+)}(h8``member`` the name of the list_head within the struct. h](j1)}(h ``member``h]j$)}(hjMh]hmember}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1j#hjMubah}(h]h ]h"]h$]h&]uh1j0hS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhj|MubjK)}(hhh]j)}(h,the name of the list_head within the struct.h]h,the name of the list_head within the struct.}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjMhMhjMubah}(h]h ]h"]h$]h&]uh1jJhj|Mubeh}(h]h ]h"]h$]h&]uh1j*hjMhMhjMubeh}(h]h ]h"]h$]h&]uh1j%hjLubj)}(h**Description**h]j)}(hjMh]h Description}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjMubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhjLubj)}(h,Note, that list is expected to be not empty.h]h,Note, that list is expected to be not empty.}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhjLubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj&hhhNhNubj8)}(hhh]h}(h]h ]h"]h$]h&]entries](jD"list_first_entry_or_null (C macro)c.list_first_entry_or_nullhNtauh1j7hj&hhhNhNubjI)}(hhh](jN)}(hlist_first_entry_or_nullh]jT)}(hlist_first_entry_or_nullh]jZ)}(hlist_first_entry_or_nullh]j`)}(hjMh]hlist_first_entry_or_null}(hjNhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjNubah}(h]h ](jrjseh"]h$]h&]hhuh1jYhjMhhhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMubah}(h]h ]h"]h$]h&]hhj~uh1jSjjhjMhhhjNhMubah}(h]jMah ](jjeh"]h$]h&]jj)jhuh1jMhjNhMhjMhhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhjMhhhjNhMubeh}(h]h ](jmacroeh"]h$]h&]jjjj2Njj2Njjjuh1jHhhhj&hNhNubj)}(h0``list_first_entry_or_null (ptr, type, member)``h]j$)}(hj8Nh]h,list_first_entry_or_null (ptr, type, member)}(hj:NhhhNhNubah}(h]h ]h"]h$]h&]uh1j#hj6Nubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhj&hhubj)}(h"get the first element from a list h]j)}(h!get the first element from a listh]h!get the first element from a list}(hjRNhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhjNNubah}(h]h ]h"]h$]h&]uh1jhj`NhMhj&hhubj)}(h**Parameters** ``ptr`` the list head to take the element from. ``type`` the type of the struct this is embedded in. ``member`` the name of the list_head within the struct. **Description** Note that if the list is empty, it returns NULL.h](j)}(h**Parameters**h]j)}(hjmNh]h Parameters}(hjoNhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjkNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhjgNubj&)}(hhh](j+)}(h0``ptr`` the list head to take the element from. h](j1)}(h``ptr``h]j$)}(hjNh]hptr}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1j#hjNubah}(h]h ]h"]h$]h&]uh1j0hS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhjNubjK)}(hhh]j)}(h'the list head to take the element from.h]h'the list head to take the element from.}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjNhMhjNubah}(h]h ]h"]h$]h&]uh1jJhjNubeh}(h]h ]h"]h$]h&]uh1j*hjNhMhjNubj+)}(h5``type`` the type of the struct this is embedded in. h](j1)}(h``type``h]j$)}(hjNh]htype}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1j#hjNubah}(h]h ]h"]h$]h&]uh1j0hS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhjNubjK)}(hhh]j)}(h+the type of the struct this is embedded in.h]h+the type of the struct this is embedded in..}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjNhMhjNubah}(h]h ]h"]h$]h&]uh1jJhjNubeh}(h]h ]h"]h$]h&]uh1j*hjNhMhjNubj+)}(h8``member`` the name of the list_head within the struct. h](j1)}(h ``member``h]j$)}(hjNh]hmember}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1j#hjNubah}(h]h ]h"]h$]h&]uh1j0hS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhjNubjK)}(hhh]j)}(h,the name of the list_head within the struct.h]h,the name of the list_head within the struct.}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjOhMhjOubah}(h]h ]h"]h$]h&]uh1jJhjNubeh}(h]h ]h"]h$]h&]uh1j*hjOhMhjNubeh}(h]h ]h"]h$]h&]uh1j%hjgNubj)}(h**Description**h]j)}(hj9Oh]h Description}(hj;OhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj7Oubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhjgNubj)}(h0Note that if the list is empty, it returns NULL.h]h0Note that if the list is empty, it returns NULL.}(hjOOhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhjgNubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj&hhhNhNubj8)}(hhh]h}(h]h ]h"]h$]h&]entries](jD*list_first_entry_or_null_acquire (C macro)"c.list_first_entry_or_null_acquirehNtauh1j7hj&hhhNhNubjI)}(hhh](jN)}(h list_first_entry_or_null_acquireh]jT)}(h list_first_entry_or_null_acquireh]jZ)}(h list_first_entry_or_null_acquireh]j`)}(hjxOh]h list_first_entry_or_null_acquire}(hjOhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj~Oubah}(h]h ](jrjseh"]h$]h&]hhuh1jYhjzOhhhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMubah}(h]h ]h"]h$]h&]hhj~uh1jSjjhjvOhhhjOhMubah}(h]jqOah ](jjeh"]h$]h&]jj)jhuh1jMhjOhMhjsOhhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhjsOhhhjOhMubeh}(h]h ](jmacroeh"]h$]h&]jjjjOjjOjjjuh1jHhhhj&hNhNubj)}(h8``list_first_entry_or_null_acquire (ptr, type, member)``h]j$)}(hjOh]h4list_first_entry_or_null_acquire (ptr, type, member)}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1j#hjOubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhj&hhubj)}(h/get the first element from a list with barrier h]j)}(h.get the first element from a list with barrierh]h.get the first element from a list with barrier}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhjOubah}(h]h ]h"]h$]h&]uh1jhjOhMhj&hhubj)}(h**Parameters** ``ptr`` the list head to take the element from. ``type`` the type of the struct this is embedded in. ``member`` the name of the list_head within the struct. **Description** Note that if the list is empty, it returns NULL.h](j)}(h**Parameters**h]j)}(hjOh]h Parameters}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjOubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhjOubj&)}(hhh](j+)}(h0``ptr`` the list head to take the element from. h](j1)}(h``ptr``h]j$)}(hjPh]hptr}(hj PhhhNhNubah}(h]h ]h"]h$]h&]uh1j#hjPubah}(h]h ]h"]h$]h&]uh1j0hS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhjPubjK)}(hhh]j)}(h'the list head to take the element from.h]h'the list head to take the element from.}(hj!PhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjPhMhjPubah}(h]h ]h"]h$]h&]uh1jJhjPubeh}(h]h ]h"]h$]h&]uh1j*hjPhMhjOubj+)}(h5``type`` the type of the struct this is embedded in. h](j1)}(h``type``h]j$)}(hjAPh]htype}(hjCPhhhNhNubah}(h]h ]h"]h$]h&]uh1j#hj?Pubah}(h]h ]h"]h$]h&]uh1j0hS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhj;PubjK)}(hhh]j)}(h+the type of the struct this is embedded in.h]h+the type of the struct this is embedded in.}(hjZPhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjVPhMhjWPubah}(h]h ]h"]h$]h&]uh1jJhj;Pubeh}(h]h ]h"]h$]h&]uh1j*hjVPhMhjOubj+)}(h8``member`` the name of the list_head within the struct. h](j1)}(h ``member``h]j$)}(hjzPh]hmember}(hj|PhhhNhNubah}(h]h ]h"]h$]h&]uh1j#hjxPubah}(h]h ]h"]h$]h&]uh1j0hS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhjtPubjK)}(hhh]j)}(h,the name of the list_head within the struct.h]h,the name of the list_head within the struct.}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjPhMhjPubah}(h]h ]h"]h$]h&]uh1jJhjtPubeh}(h]h ]h"]h$]h&]uh1j*hjPhMhjOubeh}(h]h ]h"]h$]h&]uh1j%hjOubj)}(h**Description**h]j)}(hjPh]h Description}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjPubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhjOubj)}(h0Note that if the list is empty, it returns NULL.h]h0Note that if the list is empty, it returns NULL.}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhjOubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj&hhhNhNubj8)}(hhh]h}(h]h ]h"]h$]h&]entries](jD!list_last_entry_or_null (C macro)c.list_last_entry_or_nullhNtauh1j7hj&hhhNhNubjI)}(hhh](jN)}(hlist_last_entry_or_nullh]jT)}(hlist_last_entry_or_nullh]jZ)}(hlist_last_entry_or_nullh]j`)}(hjPh]hlist_last_entry_or_null}(hjPhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjPubah}(h]h ](jrjseh"]h$]h&]hhuh1jYhjPhhhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMubah}(h]h ]h"]h$]h&]hhj~uh1jSjjhjPhhhjQhMubah}(h]jPah ](jjeh"]h$]h&]jj)jhuh1jMhjQhMhjPhhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhjPhhhjQhMubeh}(h]h ](jmacroeh"]h$]h&]jjjj*Qjj*Qjjjuh1jHhhhj&hNhNubj)}(h/``list_last_entry_or_null (ptr, type, member)``h]j$)}(hj0Qh]h+list_last_entry_or_null (ptr, type, member)}(hj2QhhhNhNubah}(h]h ]h"]h$]h&]uh1j#hj.Qubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhj&hhubj)}(h!get the last element from a list h]j)}(h get the last element from a listh]h get the last element from a list}(hjJQhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhjFQubah}(h]h ]h"]h$]h&]uh1jhjXQhMhj&hhubj)}(h**Parameters** ``ptr`` the list head to take the element from. ``type`` the type of the struct this is embedded in. ``member`` the name of the list_head within the struct. **Description** Note that if the list is empty, it returns NULL.h](j)}(h**Parameters**h]j)}(hjeQh]h Parameters}(hjgQhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjcQubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhj_Qubj&)}(hhh](j+)}(h0``ptr`` the list head to take the element from. h](j1)}(h``ptr``h]j$)}(hjQh]hptr}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1j#hjQubah}(h]h ]h"]h$]h&]uh1j0hS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhj~QubjK)}(hhh]j)}(h'the list head to take the element from.h]h'the list head to take the element from.}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjQhMhjQubah}(h]h ]h"]h$]h&]uh1jJhj~Qubeh}(h]h ]h"]h$]h&]uh1j*hjQhMhj{Qubj+)}(h5``type`` the type of the struct this is embedded in. h](j1)}(h``type``h]j$)}(hjQh]htype}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1j#hjQubah}(h]h ]h"]h$]h&]uh1j0hS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhjQubjK)}(hhh]j)}(h+the type of the struct this is embedded in.h]h+the type of the struct this is embedded in.}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjQhMhjQubah}(h]h ]h"]h$]h&]uh1jJhjQubeh}(h]h ]h"]h$]h&]uh1j*hjQhMhj{Qubj+)}(h8``member`` the name of the list_head within the struct. h](j1)}(h ``member``h]j$)}(hjQh]hmember}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1j#hjQubah}(h]h ]h"]h$]h&]uh1j0hS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhjQubjK)}(hhh]j)}(h,the name of the list_head within the struct.h]h,the name of the list_head within the struct.}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj RhMhj Rubah}(h]h ]h"]h$]h&]uh1jJhjQubeh}(h]h ]h"]h$]h&]uh1j*hj RhMhj{Qubeh}(h]h ]h"]h$]h&]uh1j%hj_Qubj)}(h**Description**h]j)}(hj1Rh]h Description}(hj3RhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj/Rubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhj_Qubj)}(h0Note that if the list is empty, it returns NULL.h]h0Note that if the list is empty, it returns NULL.}(hjGRhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhj_Qubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj&hhhNhNubj8)}(hhh]h}(h]h ]h"]h$]h&]entries](jDlist_next_entry (C macro)c.list_next_entryhNtauh1j7hj&hhhNhNubjI)}(hhh](jN)}(hlist_next_entryh]jT)}(hlist_next_entryh]jZ)}(hlist_next_entryh]j`)}(hjpRh]hlist_next_entry}(hjzRhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjvRubah}(h]h ](jrjseh"]h$]h&]hhuh1jYhjrRhhhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMubah}(h]h ]h"]h$]h&]hhj~uh1jSjjhjnRhhhjRhMubah}(h]jiRah ](jjeh"]h$]h&]jj)jhuh1jMhjRhMhjkRhhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhjkRhhhjRhMubeh}(h]h ](jmacroeh"]h$]h&]jjjjRjjRjjjuh1jHhhhj&hNhNubj)}(h!``list_next_entry (pos, member)``h]j$)}(hjRh]hlist_next_entry (pos, member)}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1j#hjRubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhj&hhubj)}(hget the next element in list h]j)}(hget the next element in listh]hget the next element in list}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhjRubah}(h]h ]h"]h$]h&]uh1jhjRhMhj&hhubj)}(hi**Parameters** ``pos`` the type * to cursor ``member`` the name of the list_head within the struct.h](j)}(h**Parameters**h]j)}(hjRh]h Parameters}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjRubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhjRubj&)}(hhh](j+)}(h``pos`` the type * to cursor h](j1)}(h``pos``h]j$)}(hjSh]hpos}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1j#hjRubah}(h]h ]h"]h$]h&]uh1j0hS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhjRubjK)}(hhh]j)}(hthe type * to cursorh]hthe type * to cursor}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1hhjShMhjSubah}(h]h ]h"]h$]h&]uh1jJhjRubeh}(h]h ]h"]h$]h&]uh1j*hjShMhjRubj+)}(h7``member`` the name of the list_head within the struct.h](j1)}(h ``member``h]j$)}(hj9Sh]hmember}(hj;ShhhNhNubah}(h]h ]h"]h$]h&]uh1j#hj7Subah}(h]h ]h"]h$]h&]uh1j0hS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhj3SubjK)}(hhh]j)}(h,the name of the list_head within the struct.h]h,the name of the list_head within the struct.}(hjRShhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhjOSubah}(h]h ]h"]h$]h&]uh1jJhj3Subeh}(h]h ]h"]h$]h&]uh1j*hjNShMhjRubeh}(h]h ]h"]h$]h&]uh1j%hjRubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj&hhhNhNubj8)}(hhh]h}(h]h ]h"]h$]h&]entries](jD"list_next_entry_circular (C macro)c.list_next_entry_circularhNtauh1j7hj&hhhNhNubjI)}(hhh](jN)}(hlist_next_entry_circularh]jT)}(hlist_next_entry_circularh]jZ)}(hlist_next_entry_circularh]j`)}(hjSh]hlist_next_entry_circular}(hjShhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjSubah}(h]h ](jrjseh"]h$]h&]hhuh1jYhjShhhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMubah}(h]h ]h"]h$]h&]hhj~uh1jSjjhjShhhjShMubah}(h]jSah ](jjeh"]h$]h&]jj)jhuh1jMhjShMhjShhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhjShhhjShMubeh}(h]h ](jmacroeh"]h$]h&]jjjjSjjSjjjuh1jHhhhj&hNhNubj)}(h0``list_next_entry_circular (pos, head, member)``h]j$)}(hjSh]h,list_next_entry_circular (pos, head, member)}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1j#hjSubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhj&hhubj)}(hget the next element in list h]j)}(hget the next element in listh]hget the next element in list}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhjSubah}(h]h ]h"]h$]h&]uh1jhjShMhj&hhubj)}(hX**Parameters** ``pos`` the type * to cursor. ``head`` the list head to take the element from. ``member`` the name of the list_head within the struct. **Description** Wraparound if pos is the last element (return the first element). Note, that list is expected to be not empty.h](j)}(h**Parameters**h]j)}(hjSh]h Parameters}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jhjSubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhjSubj&)}(hhh](j+)}(h``pos`` the type * to cursor. h](j1)}(h``pos``h]j$)}(hjTh]hpos}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1j#hjTubah}(h]h ]h"]h$]h&]uh1j0hS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhjTubjK)}(hhh]j)}(hthe type * to cursor.h]hthe type * to cursor.}(hj6ThhhNhNubah}(h]h ]h"]h$]h&]uh1hhj2ThMhj3Tubah}(h]h ]h"]h$]h&]uh1jJhjTubeh}(h]h ]h"]h$]h&]uh1j*hj2ThMhjTubj+)}(h1``head`` the list head to take the element from. h](j1)}(h``head``h]j$)}(hjVTh]hhead}(hjXThhhNhNubah}(h]h ]h"]h$]h&]uh1j#hjTTubah}(h]h ]h"]h$]h&]uh1j0hS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhjPTubjK)}(hhh]j)}(h'the list head to take the element from.h]h'the list head to take the element from.}(hjoThhhNhNubah}(h]h ]h"]h$]h&]uh1hhjkThMhjlTubah}(h]h ]h"]h$]h&]uh1jJhjPTubeh}(h]h ]h"]h$]h&]uh1j*hjkThMhjTubj+)}(h8``member`` the name of the list_head within the struct. h](j1)}(h ``member``h]j$)}(hjTh]hmember}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1j#hjTubah}(h]h ]h"]h$]h&]uh1j0hS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhjTubjK)}(hhh]j)}(h,the name of the list_head within the struct.h]h,the name of the list_head within the struct.}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1hhjThMhjTubah}(h]h ]h"]h$]h&]uh1jJhjTubeh}(h]h ]h"]h$]h&]uh1j*hjThMhjTubeh}(h]h ]h"]h$]h&]uh1j%hjSubj)}(h**Description**h]j)}(hjTh]h Description}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jhjTubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhjSubj)}(hnWraparound if pos is the last element (return the first element). Note, that list is expected to be not empty.h]hnWraparound if pos is the last element (return the first element). Note, that list is expected to be not empty.}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhjSubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj&hhhNhNubj8)}(hhh]h}(h]h ]h"]h$]h&]entries](jDlist_prev_entry (C macro)c.list_prev_entryhNtauh1j7hj&hhhNhNubjI)}(hhh](jN)}(hlist_prev_entryh]jT)}(hlist_prev_entryh]jZ)}(hlist_prev_entryh]j`)}(hj Uh]hlist_prev_entry}(hjUhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjUubah}(h]h ](jrjseh"]h$]h&]hhuh1jYhj UhhhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMubah}(h]h ]h"]h$]h&]hhj~uh1jSjjhjUhhhj&UhMubah}(h]jUah ](jjeh"]h$]h&]jj)jhuh1jMhj&UhMhjUhhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhjUhhhj&UhMubeh}(h]h ](jmacroeh"]h$]h&]jjjj?Ujj?Ujjjuh1jHhhhj&hNhNubj)}(h!``list_prev_entry (pos, member)``h]j$)}(hjEUh]hlist_prev_entry (pos, member)}(hjGUhhhNhNubah}(h]h ]h"]h$]h&]uh1j#hjCUubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhj&hhubj)}(hget the prev element in list h]j)}(hget the prev element in listh]hget the prev element in list}(hj_UhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhj[Uubah}(h]h ]h"]h$]h&]uh1jhjmUhMhj&hhubj)}(hi**Parameters** ``pos`` the type * to cursor ``member`` the name of the list_head within the struct.h](j)}(h**Parameters**h]j)}(hjzUh]h Parameters}(hj|UhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjxUubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhjtUubj&)}(hhh](j+)}(h``pos`` the type * to cursor h](j1)}(h``pos``h]j$)}(hjUh]hpos}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1j#hjUubah}(h]h ]h"]h$]h&]uh1j0hS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhjUubjK)}(hhh]j)}(hthe type * to cursorh]hthe type * to cursor}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjUhMhjUubah}(h]h ]h"]h$]h&]uh1jJhjUubeh}(h]h ]h"]h$]h&]uh1j*hjUhMhjUubj+)}(h7``member`` the name of the list_head within the struct.h](j1)}(h ``member``h]j$)}(hjUh]hmember}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1j#hjUubah}(h]h ]h"]h$]h&]uh1j0hS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhjUubjK)}(hhh]j)}(h,the name of the list_head within the struct.h]h,the name of the list_head within the struct.}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhjUubah}(h]h ]h"]h$]h&]uh1jJhjUubeh}(h]h ]h"]h$]h&]uh1j*hjUhMhjUubeh}(h]h ]h"]h$]h&]uh1j%hjtUubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj&hhhNhNubj8)}(hhh]h}(h]h ]h"]h$]h&]entries](jD"list_prev_entry_circular (C macro)c.list_prev_entry_circularhNtauh1j7hj&hhhNhNubjI)}(hhh](jN)}(hlist_prev_entry_circularh]jT)}(hlist_prev_entry_circularh]jZ)}(hlist_prev_entry_circularh]j`)}(hj&Vh]hlist_prev_entry_circular}(hj0VhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj,Vubah}(h]h ](jrjseh"]h$]h&]hhuh1jYhj(VhhhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMubah}(h]h ]h"]h$]h&]hhj~uh1jSjjhj$VhhhjCVhMubah}(h]jVah ](jjeh"]h$]h&]jj)jhuh1jMhjCVhMhj!Vhhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhj!VhhhjCVhMubeh}(h]h ](jmacroeh"]h$]h&]jjjj\Vjj\Vjjjuh1jHhhhj&hNhNubj)}(h0``list_prev_entry_circular (pos, head, member)``h]j$)}(hjbVh]h,list_prev_entry_circular (pos, head, member)}(hjdVhhhNhNubah}(h]h ]h"]h$]h&]uh1j#hj`Vubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhj&hhubj)}(hget the prev element in list h]j)}(hget the prev element in listh]hget the prev element in list}(hj|VhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhjxVubah}(h]h ]h"]h$]h&]uh1jhjVhMhj&hhubj)}(hX**Parameters** ``pos`` the type * to cursor. ``head`` the list head to take the element from. ``member`` the name of the list_head within the struct. **Description** Wraparound if pos is the first element (return the last element). Note, that list is expected to be not empty.h](j)}(h**Parameters**h]j)}(hjVh]h Parameters}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjVubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhjVubj&)}(hhh](j+)}(h``pos`` the type * to cursor. h](j1)}(h``pos``h]j$)}(hjVh]hpos}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1j#hjVubah}(h]h ]h"]h$]h&]uh1j0hS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhjVubjK)}(hhh]j)}(hthe type * to cursor.h]hthe type * to cursor.}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjVhMhjVubah}(h]h ]h"]h$]h&]uh1jJhjVubeh}(h]h ]h"]h$]h&]uh1j*hjVhMhjVubj+)}(h1``head`` the list head to take the element from. h](j1)}(h``head``h]j$)}(hjVh]hhead}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1j#hjVubah}(h]h ]h"]h$]h&]uh1j0hS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhjVubjK)}(hhh]j)}(h'the list head to take the element from.h]h'the list head to take the element from.}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjWhMhjWubah}(h]h ]h"]h$]h&]uh1jJhjVubeh}(h]h ]h"]h$]h&]uh1j*hjWhMhjVubj+)}(h8``member`` the name of the list_head within the struct. h](j1)}(h ``member``h]j$)}(hj(Wh]hmember}(hj*WhhhNhNubah}(h]h ]h"]h$]h&]uh1j#hj&Wubah}(h]h ]h"]h$]h&]uh1j0hS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhj"WubjK)}(hhh]j)}(h,the name of the list_head within the struct.h]h,the name of the list_head within the struct.}(hjAWhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj=WhMhj>Wubah}(h]h ]h"]h$]h&]uh1jJhj"Wubeh}(h]h ]h"]h$]h&]uh1j*hj=WhMhjVubeh}(h]h ]h"]h$]h&]uh1j%hjVubj)}(h**Description**h]j)}(hjcWh]h Description}(hjeWhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjaWubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhjVubj)}(hnWraparound if pos is the first element (return the last element). Note, that list is expected to be not empty.h]hnWraparound if pos is the first element (return the last element). Note, that list is expected to be not empty.}(hjyWhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhjVubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj&hhhNhNubj8)}(hhh]h}(h]h ]h"]h$]h&]entries](jDlist_for_each (C macro)c.list_for_eachhNtauh1j7hj&hhhNhNubjI)}(hhh](jN)}(h list_for_eachh]jT)}(h list_for_eachh]jZ)}(h list_for_eachh]j`)}(hjWh]h list_for_each}(hjWhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjWubah}(h]h ](jrjseh"]h$]h&]hhuh1jYhjWhhhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMubah}(h]h ]h"]h$]h&]hhj~uh1jSjjhjWhhhjWhMubah}(h]jWah ](jjeh"]h$]h&]jj)jhuh1jMhjWhMhjWhhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhjWhhhjWhMubeh}(h]h ](jmacroeh"]h$]h&]jjjjWjjWjjjuh1jHhhhj&hNhNubj)}(h``list_for_each (pos, head)``h]j$)}(hjWh]hlist_for_each (pos, head)}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1j#hjWubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhj&hhubj)}(hiterate over a list h]j)}(hiterate over a listh]hiterate over a list}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhjWubah}(h]h ]h"]h$]h&]uh1jhjXhMhj&hhubj)}(h**Parameters** ``pos`` the :c:type:`struct list_head ` to use as a loop cursor. ``head`` the head for your list.h](j)}(h**Parameters**h]j)}(hjXh]h Parameters}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjXubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhj Xubj&)}(hhh](j+)}(hL``pos`` the :c:type:`struct list_head ` to use as a loop cursor. h](j1)}(h``pos``h]j$)}(hj2Xh]hpos}(hj4XhhhNhNubah}(h]h ]h"]h$]h&]uh1j#hj0Xubah}(h]h ]h"]h$]h&]uh1j0hS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhj,XubjK)}(hhh]j)}(hCthe :c:type:`struct list_head ` to use as a loop cursor.h](hthe }(hjKXhhhNhNubh)}(h&:c:type:`struct list_head `h]j$)}(hjUXh]hstruct list_head}(hjWXhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1j#hjSXubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjj list_headuh1hhjGXhMhjKXubh to use as a loop cursor.}(hjKXhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjGXhMhjHXubah}(h]h ]h"]h$]h&]uh1jJhj,Xubeh}(h]h ]h"]h$]h&]uh1j*hjGXhMhj)Xubj+)}(h ``head`` the head for your list.h](j1)}(h``head``h]j$)}(hjXh]hhead}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1j#hjXubah}(h]h ]h"]h$]h&]uh1j0hS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhjXubjK)}(hhh]j)}(hthe head for your list.h]hthe head for your list.}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhjXubah}(h]h ]h"]h$]h&]uh1jJhjXubeh}(h]h ]h"]h$]h&]uh1j*hjXhMhj)Xubeh}(h]h ]h"]h$]h&]uh1j%hj Xubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj&hhhNhNubj8)}(hhh]h}(h]h ]h"]h$]h&]entries](jD list_for_each_continue (C macro)c.list_for_each_continuehNtauh1j7hj&hhhNhNubjI)}(hhh](jN)}(hlist_for_each_continueh]jT)}(hlist_for_each_continueh]jZ)}(hlist_for_each_continueh]j`)}(hjXh]hlist_for_each_continue}(hjXhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjXubah}(h]h ](jrjseh"]h$]h&]hhuh1jYhjXhhhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMubah}(h]h ]h"]h$]h&]hhj~uh1jSjjhjXhhhjXhMubah}(h]jXah ](jjeh"]h$]h&]jj)jhuh1jMhjXhMhjXhhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhjXhhhjXhMubeh}(h]h ](jmacroeh"]h$]h&]jjjjYjjYjjjuh1jHhhhj&hNhNubj)}(h&``list_for_each_continue (pos, head)``h]j$)}(hjYh]h"list_for_each_continue (pos, head)}(hj YhhhNhNubah}(h]h ]h"]h$]h&]uh1j#hjYubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhj&hhubj)}(hcontinue iteration over a list h]j)}(hcontinue iteration over a listh]hcontinue iteration over a list}(hj8YhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhj4Yubah}(h]h ]h"]h$]h&]uh1jhjFYhMhj&hhubj)}(h**Parameters** ``pos`` the :c:type:`struct list_head ` to use as a loop cursor. ``head`` the head for your list. **Description** Continue to iterate over a list, continuing after the current position.h](j)}(h**Parameters**h]j)}(hjSYh]h Parameters}(hjUYhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjQYubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhjMYubj&)}(hhh](j+)}(hL``pos`` the :c:type:`struct list_head ` to use as a loop cursor. h](j1)}(h``pos``h]j$)}(hjrYh]hpos}(hjtYhhhNhNubah}(h]h ]h"]h$]h&]uh1j#hjpYubah}(h]h ]h"]h$]h&]uh1j0hS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhjlYubjK)}(hhh]j)}(hCthe :c:type:`struct list_head ` to use as a loop cursor.h](hthe }(hjYhhhNhNubh)}(h&:c:type:`struct list_head `h]j$)}(hjYh]hstruct list_head}(hjYhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1j#hjYubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjj list_headuh1hhjYhMhjYubh to use as a loop cursor.}(hjYhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjYhMhjYubah}(h]h ]h"]h$]h&]uh1jJhjlYubeh}(h]h ]h"]h$]h&]uh1j*hjYhMhjiYubj+)}(h!``head`` the head for your list. h](j1)}(h``head``h]j$)}(hjYh]hhead}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1j#hjYubah}(h]h ]h"]h$]h&]uh1j0hS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhjYubjK)}(hhh]j)}(hthe head for your list.h]hthe head for your list.}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjYhMhjYubah}(h]h ]h"]h$]h&]uh1jJhjYubeh}(h]h ]h"]h$]h&]uh1j*hjYhMhjiYubeh}(h]h ]h"]h$]h&]uh1j%hjMYubj)}(h**Description**h]j)}(hj Zh]h Description}(hj ZhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjZubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhjMYubj)}(hGContinue to iterate over a list, continuing after the current position.h]hGContinue to iterate over a list, continuing after the current position.}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhjMYubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj&hhhNhNubj8)}(hhh]h}(h]h ]h"]h$]h&]entries](jDlist_for_each_prev (C macro)c.list_for_each_prevhNtauh1j7hj&hhhNhNubjI)}(hhh](jN)}(hlist_for_each_prevh]jT)}(hlist_for_each_prevh]jZ)}(hlist_for_each_prevh]j`)}(hjHZh]hlist_for_each_prev}(hjRZhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjNZubah}(h]h ](jrjseh"]h$]h&]hhuh1jYhjJZhhhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMubah}(h]h ]h"]h$]h&]hhj~uh1jSjjhjFZhhhjeZhMubah}(h]jAZah ](jjeh"]h$]h&]jj)jhuh1jMhjeZhMhjCZhhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhjCZhhhjeZhMubeh}(h]h ](jmacroeh"]h$]h&]jjjj~Zjj~Zjjjuh1jHhhhj&hNhNubj)}(h"``list_for_each_prev (pos, head)``h]j$)}(hjZh]hlist_for_each_prev (pos, head)}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1j#hjZubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhj&hhubj)}(hiterate over a list backwards h]j)}(hiterate over a list backwardsh]hiterate over a list backwards}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhjZubah}(h]h ]h"]h$]h&]uh1jhjZhMhj&hhubj)}(h**Parameters** ``pos`` the :c:type:`struct list_head ` to use as a loop cursor. ``head`` the head for your list.h](j)}(h**Parameters**h]j)}(hjZh]h Parameters}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjZubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhjZubj&)}(hhh](j+)}(hL``pos`` the :c:type:`struct list_head ` to use as a loop cursor. h](j1)}(h``pos``h]j$)}(hjZh]hpos}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1j#hjZubah}(h]h ]h"]h$]h&]uh1j0hS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhjZubjK)}(hhh]j)}(hCthe :c:type:`struct list_head ` to use as a loop cursor.h](hthe }(hjZhhhNhNubh)}(h&:c:type:`struct list_head `h]j$)}(hjZh]hstruct list_head}(hjZhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1j#hjZubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjj list_headuh1hhjZhMhjZubh to use as a loop cursor.}(hjZhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjZhMhjZubah}(h]h ]h"]h$]h&]uh1jJhjZubeh}(h]h ]h"]h$]h&]uh1j*hjZhMhjZubj+)}(h ``head`` the head for your list.h](j1)}(h``head``h]j$)}(hj4[h]hhead}(hj6[hhhNhNubah}(h]h ]h"]h$]h&]uh1j#hj2[ubah}(h]h ]h"]h$]h&]uh1j0hS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhj.[ubjK)}(hhh]j)}(hthe head for your list.h]hthe head for your list.}(hjM[hhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhjJ[ubah}(h]h ]h"]h$]h&]uh1jJhj.[ubeh}(h]h ]h"]h$]h&]uh1j*hjI[hMhjZubeh}(h]h ]h"]h$]h&]uh1j%hjZubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj&hhhNhNubj8)}(hhh]h}(h]h ]h"]h$]h&]entries](jDlist_for_each_safe (C macro)c.list_for_each_safehNtauh1j7hj&hhhNhNubjI)}(hhh](jN)}(hlist_for_each_safeh]jT)}(hlist_for_each_safeh]jZ)}(hlist_for_each_safeh]j`)}(hj[h]hlist_for_each_safe}(hj[hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj[ubah}(h]h ](jrjseh"]h$]h&]hhuh1jYhj[hhhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMubah}(h]h ]h"]h$]h&]hhj~uh1jSjjhj[hhhj[hMubah}(h]j[ah ](jjeh"]h$]h&]jj)jhuh1jMhj[hMhj[hhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhj[hhhj[hMubeh}(h]h ](jmacroeh"]h$]h&]jjjj[jj[jjjuh1jHhhhj&hNhNubj)}(h%``list_for_each_safe (pos, n, head)``h]j$)}(hj[h]h!list_for_each_safe (pos, n, head)}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1j#hj[ubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhj&hhubj)}(h7iterate over a list safe against removal of list entry h]j)}(h6iterate over a list safe against removal of list entryh]h6iterate over a list safe against removal of list entry}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhj[ubah}(h]h ]h"]h$]h&]uh1jhj[hMhj&hhubj)}(h**Parameters** ``pos`` the :c:type:`struct list_head ` to use as a loop cursor. ``n`` another :c:type:`struct list_head ` to use as temporary storage ``head`` the head for your list.h](j)}(h**Parameters**h]j)}(hj[h]h Parameters}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj[ubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhj[ubj&)}(hhh](j+)}(hL``pos`` the :c:type:`struct list_head ` to use as a loop cursor. h](j1)}(h``pos``h]j$)}(hj\h]hpos}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1j#hj\ubah}(h]h ]h"]h$]h&]uh1j0hS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhj\ubjK)}(hhh]j)}(hCthe :c:type:`struct list_head ` to use as a loop cursor.h](hthe }(hj1\hhhNhNubh)}(h&:c:type:`struct list_head `h]j$)}(hj;\h]hstruct list_head}(hj=\hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1j#hj9\ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjj list_headuh1hhj-\hMhj1\ubh to use as a loop cursor.}(hj1\hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj-\hMhj.\ubah}(h]h ]h"]h$]h&]uh1jJhj\ubeh}(h]h ]h"]h$]h&]uh1j*hj-\hMhj\ubj+)}(hQ``n`` another :c:type:`struct list_head ` to use as temporary storage h](j1)}(h``n``h]j$)}(hjt\h]hn}(hjv\hhhNhNubah}(h]h ]h"]h$]h&]uh1j#hjr\ubah}(h]h ]h"]h$]h&]uh1j0hS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhjn\ubjK)}(hhh]j)}(hJanother :c:type:`struct list_head ` to use as temporary storageh](hanother }(hj\hhhNhNubh)}(h&:c:type:`struct list_head `h]j$)}(hj\h]hstruct list_head}(hj\hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1j#hj\ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjj list_headuh1hhj\hMhj\ubh to use as temporary storage}(hj\hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj\hMhj\ubah}(h]h ]h"]h$]h&]uh1jJhjn\ubeh}(h]h ]h"]h$]h&]uh1j*hj\hMhj\ubj+)}(h ``head`` the head for your list.h](j1)}(h``head``h]j$)}(hj\h]hhead}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1j#hj\ubah}(h]h ]h"]h$]h&]uh1j0hS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhj\ubjK)}(hhh]j)}(hthe head for your list.h]hthe head for your list.}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhj\ubah}(h]h ]h"]h$]h&]uh1jJhj\ubeh}(h]h ]h"]h$]h&]uh1j*hj\hMhj\ubeh}(h]h ]h"]h$]h&]uh1j%hj[ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj&hhhNhNubj8)}(hhh]h}(h]h ]h"]h$]h&]entries](jD!list_for_each_prev_safe (C macro)c.list_for_each_prev_safehNtauh1j7hj&hhhNhNubjI)}(hhh](jN)}(hlist_for_each_prev_safeh]jT)}(hlist_for_each_prev_safeh]jZ)}(hlist_for_each_prev_safeh]j`)}(hj$]h]hlist_for_each_prev_safe}(hj.]hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj*]ubah}(h]h ](jrjseh"]h$]h&]hhuh1jYhj&]hhhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhM ubah}(h]h ]h"]h$]h&]hhj~uh1jSjjhj"]hhhjA]hM ubah}(h]j]ah ](jjeh"]h$]h&]jj)jhuh1jMhjA]hM hj]hhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhj]hhhjA]hM ubeh}(h]h ](jmacroeh"]h$]h&]jjjjZ]jjZ]jjjuh1jHhhhj&hNhNubj)}(h*``list_for_each_prev_safe (pos, n, head)``h]j$)}(hj`]h]h&list_for_each_prev_safe (pos, n, head)}(hjb]hhhNhNubah}(h]h ]h"]h$]h&]uh1j#hj^]ubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhM hj&hhubj)}(hAiterate over a list backwards safe against removal of list entry h]j)}(h@iterate over a list backwards safe against removal of list entryh]h@iterate over a list backwards safe against removal of list entry}(hjz]hhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhM hjv]ubah}(h]h ]h"]h$]h&]uh1jhj]hM hj&hhubj)}(h**Parameters** ``pos`` the :c:type:`struct list_head ` to use as a loop cursor. ``n`` another :c:type:`struct list_head ` to use as temporary storage ``head`` the head for your list.h](j)}(h**Parameters**h]j)}(hj]h]h Parameters}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj]ubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhj]ubj&)}(hhh](j+)}(hL``pos`` the :c:type:`struct list_head ` to use as a loop cursor. h](j1)}(h``pos``h]j$)}(hj]h]hpos}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1j#hj]ubah}(h]h ]h"]h$]h&]uh1j0hS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhM hj]ubjK)}(hhh]j)}(hCthe :c:type:`struct list_head ` to use as a loop cursor.h](hthe }(hj]hhhNhNubh)}(h&:c:type:`struct list_head `h]j$)}(hj]h]hstruct list_head}(hj]hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1j#hj]ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjj list_headuh1hhj]hM hj]ubh to use as a loop cursor.}(hj]hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj]hM hj]ubah}(h]h ]h"]h$]h&]uh1jJhj]ubeh}(h]h ]h"]h$]h&]uh1j*hj]hM hj]ubj+)}(hQ``n`` another :c:type:`struct list_head ` to use as temporary storage h](j1)}(h``n``h]j$)}(hj^h]hn}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1j#hj^ubah}(h]h ]h"]h$]h&]uh1j0hS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhM hj ^ubjK)}(hhh]j)}(hJanother :c:type:`struct list_head ` to use as temporary storageh](hanother }(hj)^hhhNhNubh)}(h&:c:type:`struct list_head `h]j$)}(hj3^h]hstruct list_head}(hj5^hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1j#hj1^ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjj list_headuh1hhj%^hM hj)^ubh to use as temporary storage}(hj)^hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj%^hM hj&^ubah}(h]h ]h"]h$]h&]uh1jJhj ^ubeh}(h]h ]h"]h$]h&]uh1j*hj%^hM hj]ubj+)}(h ``head`` the head for your list.h](j1)}(h``head``h]j$)}(hjl^h]hhead}(hjn^hhhNhNubah}(h]h ]h"]h$]h&]uh1j#hjj^ubah}(h]h ]h"]h$]h&]uh1j0hS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhjf^ubjK)}(hhh]j)}(hthe head for your list.h]hthe head for your list.}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhM hj^ubah}(h]h ]h"]h$]h&]uh1jJhjf^ubeh}(h]h ]h"]h$]h&]uh1j*hj^hMhj]ubeh}(h]h ]h"]h$]h&]uh1j%hj]ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj&hhhNhNubj8)}(hhh]h}(h]h ]h"]h$]h&]entries](jDlist_count_nodes (C function)c.list_count_nodeshNtauh1j7hj&hhhNhNubjI)}(hhh](jN)}(h0size_t list_count_nodes (struct list_head *head)h]jT)}(h/size_t list_count_nodes(struct list_head *head)h](h)}(hhh]j`)}(hsize_th]hsize_t}(hj^hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj^ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj^modnameN classnameNjj)}j]j)}jlist_count_nodessbc.list_count_nodesasbuh1hhj^hhhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMubj)}(h h]h }(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^hhhj^hMubjZ)}(hlist_count_nodesh]j`)}(hj^h]hlist_count_nodes}(hj^hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj^ubah}(h]h ](jrjseh"]h$]h&]hhuh1jYhj^hhhj^hMubj)}(h(struct list_head *head)h]j)}(hstruct list_head *headh](j)}(hjh]hstruct}(hj_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_ubj)}(h h]h }(hj%_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_ubh)}(hhh]j`)}(h list_headh]h list_head}(hj6_hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj3_ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj8_modnameN classnameNjj)}j]j^c.list_count_nodesasbuh1hhj_ubj)}(h h]h }(hjT_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_ubj2)}(hjh]h*}(hjb_hhhNhNubah}(h]h ]j=ah"]h$]h&]uh1j1hj_ubj`)}(hheadh]hhead}(hjo_hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj_ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj_ubah}(h]h ]h"]h$]h&]hhuh1jhj^hhhj^hMubeh}(h]h ]h"]h$]h&]hhj~uh1jSjjhj^hhhj^hMubah}(h]j^ah ](jjeh"]h$]h&]jj)jhuh1jMhj^hMhj^hhubj)}(hhh]j)}(hcount nodes in the listh]hcount nodes in the list}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhj_hhubah}(h]h ]h"]h$]h&]uh1jhj^hhhj^hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj_jj_jjjuh1jHhhhj&hNhNubj)}(hD**Parameters** ``struct list_head *head`` the head for your list.h](j)}(h**Parameters**h]j)}(hj_h]h Parameters}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj_ubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhj_ubj&)}(hhh]j+)}(h2``struct list_head *head`` the head for your list.h](j1)}(h``struct list_head *head``h]j$)}(hj_h]hstruct list_head *head}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1j#hj_ubah}(h]h ]h"]h$]h&]uh1j0hS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhj_ubjK)}(hhh]j)}(hthe head for your list.h]hthe head for your list.}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhj_ubah}(h]h ]h"]h$]h&]uh1jJhj_ubeh}(h]h ]h"]h$]h&]uh1j*hj_hMhj_ubah}(h]h ]h"]h$]h&]uh1j%hj_ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj&hhhNhNubj8)}(hhh]h}(h]h ]h"]h$]h&]entries](jDlist_entry_is_head (C macro)c.list_entry_is_headhNtauh1j7hj&hhhNhNubjI)}(hhh](jN)}(hlist_entry_is_headh]jT)}(hlist_entry_is_headh]jZ)}(hlist_entry_is_headh]j`)}(hj.`h]hlist_entry_is_head}(hj8`hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj4`ubah}(h]h ](jrjseh"]h$]h&]hhuh1jYhj0`hhhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhM$ubah}(h]h ]h"]h$]h&]hhj~uh1jSjjhj,`hhhjK`hM$ubah}(h]j'`ah ](jjeh"]h$]h&]jj)jhuh1jMhjK`hM$hj)`hhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhj)`hhhjK`hM$ubeh}(h]h ](jmacroeh"]h$]h&]jjjjd`jjd`jjjuh1jHhhhj&hNhNubj)}(h*``list_entry_is_head (pos, head, member)``h]j$)}(hjj`h]h&list_entry_is_head (pos, head, member)}(hjl`hhhNhNubah}(h]h ]h"]h$]h&]uh1j#hjh`ubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhM&hj&hhubj)}(h1test if the entry points to the head of the list h]j)}(h0test if the entry points to the head of the listh]h0test if the entry points to the head of the list}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhM$hj`ubah}(h]h ]h"]h$]h&]uh1jhj`hM$hj&hhubj)}(h**Parameters** ``pos`` the type * to cursor ``head`` the head for your list. ``member`` the name of the list_head within the struct.h](j)}(h**Parameters**h]j)}(hj`h]h Parameters}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj`ubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhM(hj`ubj&)}(hhh](j+)}(h``pos`` the type * to cursor h](j1)}(h``pos``h]j$)}(hj`h]hpos}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1j#hj`ubah}(h]h ]h"]h$]h&]uh1j0hS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhM%hj`ubjK)}(hhh]j)}(hthe type * to cursorh]hthe type * to cursor}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj`hM%hj`ubah}(h]h ]h"]h$]h&]uh1jJhj`ubeh}(h]h ]h"]h$]h&]uh1j*hj`hM%hj`ubj+)}(h!``head`` the head for your list. h](j1)}(h``head``h]j$)}(hj`h]hhead}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1j#hj`ubah}(h]h ]h"]h$]h&]uh1j0hS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhM&hj`ubjK)}(hhh]j)}(hthe head for your list.h]hthe head for your list.}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1hhj ahM&hj aubah}(h]h ]h"]h$]h&]uh1jJhj`ubeh}(h]h ]h"]h$]h&]uh1j*hj ahM&hj`ubj+)}(h7``member`` the name of the list_head within the struct.h](j1)}(h ``member``h]j$)}(hj0ah]hmember}(hj2ahhhNhNubah}(h]h ]h"]h$]h&]uh1j#hj.aubah}(h]h ]h"]h$]h&]uh1j0hS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhM(hj*aubjK)}(hhh]j)}(h,the name of the list_head within the struct.h]h,the name of the list_head within the struct.}(hjIahhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhM'hjFaubah}(h]h ]h"]h$]h&]uh1jJhj*aubeh}(h]h ]h"]h$]h&]uh1j*hjEahM(hj`ubeh}(h]h ]h"]h$]h&]uh1j%hj`ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj&hhhNhNubj8)}(hhh]h}(h]h ]h"]h$]h&]entries](jDlist_for_each_entry (C macro)c.list_for_each_entryhNtauh1j7hj&hhhNhNubjI)}(hhh](jN)}(hlist_for_each_entryh]jT)}(hlist_for_each_entryh]jZ)}(hlist_for_each_entryh]j`)}(hjah]hlist_for_each_entry}(hjahhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjaubah}(h]h ](jrjseh"]h$]h&]hhuh1jYhjahhhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhM-ubah}(h]h ]h"]h$]h&]hhj~uh1jSjjhjahhhjahM-ubah}(h]j}aah ](jjeh"]h$]h&]jj)jhuh1jMhjahM-hjahhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhjahhhjahM-ubeh}(h]h ](jmacroeh"]h$]h&]jjjjajjajjjuh1jHhhhj&hNhNubj)}(h+``list_for_each_entry (pos, head, member)``h]j$)}(hjah]h'list_for_each_entry (pos, head, member)}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1j#hjaubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhM/hj&hhubj)}(h iterate over list of given type h]j)}(hiterate over list of given typeh]hiterate over list of given type}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhM-hjaubah}(h]h ]h"]h$]h&]uh1jhjahM-hj&hhubj)}(h**Parameters** ``pos`` the type * to use as a loop cursor. ``head`` the head for your list. ``member`` the name of the list_head within the struct.h](j)}(h**Parameters**h]j)}(hjah]h Parameters}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jhjaubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhM1hjaubj&)}(hhh](j+)}(h,``pos`` the type * to use as a loop cursor. h](j1)}(h``pos``h]j$)}(hjbh]hpos}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1j#hjbubah}(h]h ]h"]h$]h&]uh1j0hS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhM.hjbubjK)}(hhh]j)}(h#the type * to use as a loop cursor.h]h#the type * to use as a loop cursor.}(hj-bhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj)bhM.hj*bubah}(h]h ]h"]h$]h&]uh1jJhjbubeh}(h]h ]h"]h$]h&]uh1j*hj)bhM.hj bubj+)}(h!``head`` the head for your list. h](j1)}(h``head``h]j$)}(hjMbh]hhead}(hjObhhhNhNubah}(h]h ]h"]h$]h&]uh1j#hjKbubah}(h]h ]h"]h$]h&]uh1j0hS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhM/hjGbubjK)}(hhh]j)}(hthe head for your list.h]hthe head for your list.}(hjfbhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjbbhM/hjcbubah}(h]h ]h"]h$]h&]uh1jJhjGbubeh}(h]h ]h"]h$]h&]uh1j*hjbbhM/hj bubj+)}(h7``member`` the name of the list_head within the struct.h](j1)}(h ``member``h]j$)}(hjbh]hmember}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1j#hjbubah}(h]h ]h"]h$]h&]uh1j0hS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhM1hjbubjK)}(hhh]j)}(h,the name of the list_head within the struct.h]h,the name of the list_head within the struct.}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhM0hjbubah}(h]h ]h"]h$]h&]uh1jJhjbubeh}(h]h ]h"]h$]h&]uh1j*hjbhM1hj bubeh}(h]h ]h"]h$]h&]uh1j%hjaubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj&hhhNhNubj8)}(hhh]h}(h]h ]h"]h$]h&]entries](jD%list_for_each_entry_reverse (C macro)c.list_for_each_entry_reversehNtauh1j7hj&hhhNhNubjI)}(hhh](jN)}(hlist_for_each_entry_reverseh]jT)}(hlist_for_each_entry_reverseh]jZ)}(hlist_for_each_entry_reverseh]j`)}(hjbh]hlist_for_each_entry_reverse}(hjbhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjbubah}(h]h ](jrjseh"]h$]h&]hhuh1jYhjbhhhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhM8ubah}(h]h ]h"]h$]h&]hhj~uh1jSjjhjbhhhjbhM8ubah}(h]jbah ](jjeh"]h$]h&]jj)jhuh1jMhjbhM8hjbhhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhjbhhhjbhM8ubeh}(h]h ](jmacroeh"]h$]h&]jjjjcjjcjjjuh1jHhhhj&hNhNubj)}(h3``list_for_each_entry_reverse (pos, head, member)``h]j$)}(hjch]h/list_for_each_entry_reverse (pos, head, member)}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1j#hjcubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhM:hj&hhubj)}(h+iterate backwards over list of given type. h]j)}(h*iterate backwards over list of given type.h]h*iterate backwards over list of given type.}(hj0chhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhM8hj,cubah}(h]h ]h"]h$]h&]uh1jhj>chM8hj&hhubj)}(h**Parameters** ``pos`` the type * to use as a loop cursor. ``head`` the head for your list. ``member`` the name of the list_head within the struct.h](j)}(h**Parameters**h]j)}(hjKch]h Parameters}(hjMchhhNhNubah}(h]h ]h"]h$]h&]uh1jhjIcubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhM<hjEcubj&)}(hhh](j+)}(h,``pos`` the type * to use as a loop cursor. h](j1)}(h``pos``h]j$)}(hjjch]hpos}(hjlchhhNhNubah}(h]h ]h"]h$]h&]uh1j#hjhcubah}(h]h ]h"]h$]h&]uh1j0hS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhM9hjdcubjK)}(hhh]j)}(h#the type * to use as a loop cursor.h]h#the type * to use as a loop cursor.}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1hhjchM9hjcubah}(h]h ]h"]h$]h&]uh1jJhjdcubeh}(h]h ]h"]h$]h&]uh1j*hjchM9hjacubj+)}(h!``head`` the head for your list. h](j1)}(h``head``h]j$)}(hjch]hhead}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1j#hjcubah}(h]h ]h"]h$]h&]uh1j0hS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhM:hjcubjK)}(hhh]j)}(hthe head for your list.h]hthe head for your list.}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1hhjchM:hjcubah}(h]h ]h"]h$]h&]uh1jJhjcubeh}(h]h ]h"]h$]h&]uh1j*hjchM:hjacubj+)}(h7``member`` the name of the list_head within the struct.h](j1)}(h ``member``h]j$)}(hjch]hmember}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1j#hjcubah}(h]h ]h"]h$]h&]uh1j0hS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhM<hjcubjK)}(hhh]j)}(h,the name of the list_head within the struct.h]h,the name of the list_head within the struct.}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhM;hjcubah}(h]h ]h"]h$]h&]uh1jJhjcubeh}(h]h ]h"]h$]h&]uh1j*hjchM<hjacubeh}(h]h ]h"]h$]h&]uh1j%hjEcubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj&hhhNhNubj8)}(hhh]h}(h]h ]h"]h$]h&]entries](jDlist_prepare_entry (C macro)c.list_prepare_entryhNtauh1j7hj&hhhNhNubjI)}(hhh](jN)}(hlist_prepare_entryh]jT)}(hlist_prepare_entryh]jZ)}(hlist_prepare_entryh]j`)}(hj0dh]hlist_prepare_entry}(hj:dhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj6dubah}(h]h ](jrjseh"]h$]h&]hhuh1jYhj2dhhhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMCubah}(h]h ]h"]h$]h&]hhj~uh1jSjjhj.dhhhjMdhMCubah}(h]j)dah ](jjeh"]h$]h&]jj)jhuh1jMhjMdhMChj+dhhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhj+dhhhjMdhMCubeh}(h]h ](jmacroeh"]h$]h&]jjjjfdjjfdjjjuh1jHhhhj&hNhNubj)}(h*``list_prepare_entry (pos, head, member)``h]j$)}(hjldh]h&list_prepare_entry (pos, head, member)}(hjndhhhNhNubah}(h]h ]h"]h$]h&]uh1j#hjjdubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMEhj&hhubj)}(h>prepare a pos entry for use in list_for_each_entry_continue() h]j)}(h=prepare a pos entry for use in list_for_each_entry_continue()h]h=prepare a pos entry for use in list_for_each_entry_continue()}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMChjdubah}(h]h ]h"]h$]h&]uh1jhjdhMChj&hhubj)}(h**Parameters** ``pos`` the type * to use as a start point ``head`` the head of the list ``member`` the name of the list_head within the struct. **Description** Prepares a pos entry for use as a start point in list_for_each_entry_continue().h](j)}(h**Parameters**h]j)}(hjdh]h Parameters}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjdubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMGhjdubj&)}(hhh](j+)}(h+``pos`` the type * to use as a start point h](j1)}(h``pos``h]j$)}(hjdh]hpos}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1j#hjdubah}(h]h ]h"]h$]h&]uh1j0hS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMDhjdubjK)}(hhh]j)}(h"the type * to use as a start pointh]h"the type * to use as a start point}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjdhMDhjdubah}(h]h ]h"]h$]h&]uh1jJhjdubeh}(h]h ]h"]h$]h&]uh1j*hjdhMDhjdubj+)}(h``head`` the head of the list h](j1)}(h``head``h]j$)}(hjdh]hhead}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1j#hjdubah}(h]h ]h"]h$]h&]uh1j0hS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMEhjdubjK)}(hhh]j)}(hthe head of the listh]hthe head of the list}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1hhjehMEhjeubah}(h]h ]h"]h$]h&]uh1jJhjdubeh}(h]h ]h"]h$]h&]uh1j*hjehMEhjdubj+)}(h8``member`` the name of the list_head within the struct. h](j1)}(h ``member``h]j$)}(hj2eh]hmember}(hj4ehhhNhNubah}(h]h ]h"]h$]h&]uh1j#hj0eubah}(h]h ]h"]h$]h&]uh1j0hS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMFhj,eubjK)}(hhh]j)}(h,the name of the list_head within the struct.h]h,the name of the list_head within the struct.}(hjKehhhNhNubah}(h]h ]h"]h$]h&]uh1hhjGehMFhjHeubah}(h]h ]h"]h$]h&]uh1jJhj,eubeh}(h]h ]h"]h$]h&]uh1j*hjGehMFhjdubeh}(h]h ]h"]h$]h&]uh1j%hjdubj)}(h**Description**h]j)}(hjmeh]h Description}(hjoehhhNhNubah}(h]h ]h"]h$]h&]uh1jhjkeubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMHhjdubj)}(hPPrepares a pos entry for use as a start point in list_for_each_entry_continue().h]hPPrepares a pos entry for use as a start point in list_for_each_entry_continue().}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMGhjdubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj&hhhNhNubj8)}(hhh]h}(h]h ]h"]h$]h&]entries](jD&list_for_each_entry_continue (C macro)c.list_for_each_entry_continuehNtauh1j7hj&hhhNhNubjI)}(hhh](jN)}(hlist_for_each_entry_continueh]jT)}(hlist_for_each_entry_continueh]jZ)}(hlist_for_each_entry_continueh]j`)}(hjeh]hlist_for_each_entry_continue}(hjehhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjeubah}(h]h ](jrjseh"]h$]h&]hhuh1jYhjehhhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMNubah}(h]h ]h"]h$]h&]hhj~uh1jSjjhjehhhjehMNubah}(h]jeah ](jjeh"]h$]h&]jj)jhuh1jMhjehMNhjehhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhjehhhjehMNubeh}(h]h ](jmacroeh"]h$]h&]jjjjejjejjjuh1jHhhhj&hNhNubj)}(h4``list_for_each_entry_continue (pos, head, member)``h]j$)}(hjeh]h0list_for_each_entry_continue (pos, head, member)}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1j#hjeubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMPhj&hhubj)}(h+continue iteration over list of given type h]j)}(h*continue iteration over list of given typeh]h*continue iteration over list of given type}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMNhjeubah}(h]h ]h"]h$]h&]uh1jhjfhMNhj&hhubj)}(hX**Parameters** ``pos`` the type * to use as a loop cursor. ``head`` the head for your list. ``member`` the name of the list_head within the struct. **Description** Continue to iterate over list of given type, continuing after the current position.h](j)}(h**Parameters**h]j)}(hjfh]h Parameters}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjfubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMRhjfubj&)}(hhh](j+)}(h,``pos`` the type * to use as a loop cursor. h](j1)}(h``pos``h]j$)}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1j#hj:fubah}(h]h ]h"]h$]h&]uh1j0hS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMOhj6fubjK)}(hhh]j)}(h#the type * to use as a loop cursor.h]h#the type * to use as a loop cursor.}(hjUfhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjQfhMOhjRfubah}(h]h ]h"]h$]h&]uh1jJhj6fubeh}(h]h ]h"]h$]h&]uh1j*hjQfhMOhj3fubj+)}(h!``head`` the head for your list. h](j1)}(h``head``h]j$)}(hjufh]hhead}(hjwfhhhNhNubah}(h]h ]h"]h$]h&]uh1j#hjsfubah}(h]h ]h"]h$]h&]uh1j0hS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMPhjofubjK)}(hhh]j)}(hthe head for your list.h]hthe head for your list.}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjfhMPhjfubah}(h]h ]h"]h$]h&]uh1jJhjofubeh}(h]h ]h"]h$]h&]uh1j*hjfhMPhj3fubj+)}(h8``member`` the name of the list_head within the struct. h](j1)}(h ``member``h]j$)}(hjfh]hmember}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1j#hjfubah}(h]h ]h"]h$]h&]uh1j0hS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMQhjfubjK)}(hhh]j)}(h,the name of the list_head within the struct.h]h,the name of the list_head within the struct.}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjfhMQhjfubah}(h]h ]h"]h$]h&]uh1jJhjfubeh}(h]h ]h"]h$]h&]uh1j*hjfhMQhj3fubeh}(h]h ]h"]h$]h&]uh1j%hjfubj)}(h**Description**h]j)}(hjfh]h Description}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjfubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMShjfubj)}(hSContinue to iterate over list of given type, continuing after the current position.h]hSContinue to iterate over list of given type, continuing after the current position.}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMRhjfubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj&hhhNhNubj8)}(hhh]h}(h]h ]h"]h$]h&]entries](jD.list_for_each_entry_continue_reverse (C macro)&c.list_for_each_entry_continue_reversehNtauh1j7hj&hhhNhNubjI)}(hhh](jN)}(h$list_for_each_entry_continue_reverseh]jT)}(h$list_for_each_entry_continue_reverseh]jZ)}(h$list_for_each_entry_continue_reverseh]j`)}(hj(gh]h$list_for_each_entry_continue_reverse}(hj2ghhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj.gubah}(h]h ](jrjseh"]h$]h&]hhuh1jYhj*ghhhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhM\ubah}(h]h ]h"]h$]h&]hhj~uh1jSjjhj&ghhhjEghM\ubah}(h]j!gah ](jjeh"]h$]h&]jj)jhuh1jMhjEghM\hj#ghhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhj#ghhhjEghM\ubeh}(h]h ](jmacroeh"]h$]h&]jjjj^gjj^gjjjuh1jHhhhj&hNhNubj)}(h<``list_for_each_entry_continue_reverse (pos, head, member)``h]j$)}(hjdgh]h8list_for_each_entry_continue_reverse (pos, head, member)}(hjfghhhNhNubah}(h]h ]h"]h$]h&]uh1j#hjbgubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhM^hj&hhubj)}(h'iterate backwards from the given point h]j)}(h&iterate backwards from the given pointh]h&iterate backwards from the given point}(hj~ghhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhM\hjzgubah}(h]h ]h"]h$]h&]uh1jhjghM\hj&hhubj)}(hX **Parameters** ``pos`` the type * to use as a loop cursor. ``head`` the head for your list. ``member`` the name of the list_head within the struct. **Description** Start to iterate over list of given type backwards, continuing after the current position.h](j)}(h**Parameters**h]j)}(hjgh]h Parameters}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jhjgubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhM`hjgubj&)}(hhh](j+)}(h,``pos`` the type * to use as a loop cursor. h](j1)}(h``pos``h]j$)}(hjgh]hpos}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1j#hjgubah}(h]h ]h"]h$]h&]uh1j0hS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhM]hjgubjK)}(hhh]j)}(h#the type * to use as a loop cursor.h]h#the type * to use as a loop cursor.}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1hhjghM]hjgubah}(h]h ]h"]h$]h&]uh1jJhjgubeh}(h]h ]h"]h$]h&]uh1j*hjghM]hjgubj+)}(h!``head`` the head for your list. h](j1)}(h``head``h]j$)}(hjgh]hhead}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1j#hjgubah}(h]h ]h"]h$]h&]uh1j0hS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhM^hjgubjK)}(hhh]j)}(hthe head for your list.h]hthe head for your list.}(hj hhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhM^hjhubah}(h]h ]h"]h$]h&]uh1jJhjgubeh}(h]h ]h"]h$]h&]uh1j*hjhhM^hjgubj+)}(h8``member`` the name of the list_head within the struct. h](j1)}(h ``member``h]j$)}(hj*hh]hmember}(hj,hhhhNhNubah}(h]h ]h"]h$]h&]uh1j#hj(hubah}(h]h ]h"]h$]h&]uh1j0hS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhM_hj$hubjK)}(hhh]j)}(h,the name of the list_head within the struct.h]h,the name of the list_head within the struct.}(hjChhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj?hhM_hj@hubah}(h]h ]h"]h$]h&]uh1jJhj$hubeh}(h]h ]h"]h$]h&]uh1j*hj?hhM_hjgubeh}(h]h ]h"]h$]h&]uh1j%hjgubj)}(h**Description**h]j)}(hjehh]h Description}(hjghhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjchubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMahjgubj)}(hZStart to iterate over list of given type backwards, continuing after the current position.h]hZStart to iterate over list of given type backwards, continuing after the current position.}(hj{hhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhM`hjgubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj&hhhNhNubj8)}(hhh]h}(h]h ]h"]h$]h&]entries](jD"list_for_each_entry_from (C macro)c.list_for_each_entry_fromhNtauh1j7hj&hhhNhNubjI)}(hhh](jN)}(hlist_for_each_entry_fromh]jT)}(hlist_for_each_entry_fromh]jZ)}(hlist_for_each_entry_fromh]j`)}(hjhh]hlist_for_each_entry_from}(hjhhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjhubah}(h]h ](jrjseh"]h$]h&]hhuh1jYhjhhhhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMjubah}(h]h ]h"]h$]h&]hhj~uh1jSjjhjhhhhjhhMjubah}(h]jhah ](jjeh"]h$]h&]jj)jhuh1jMhjhhMjhjhhhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhjhhhhjhhMjubeh}(h]h ](jmacroeh"]h$]h&]jjjjhjjhjjjuh1jHhhhj&hNhNubj)}(h0``list_for_each_entry_from (pos, head, member)``h]j$)}(hjhh]h,list_for_each_entry_from (pos, head, member)}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1j#hjhubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMlhj&hhubj)}(h7iterate over list of given type from the current point h]j)}(h6iterate over list of given type from the current pointh]h6iterate over list of given type from the current point}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMjhjhubah}(h]h ]h"]h$]h&]uh1jhjihMjhj&hhubj)}(h**Parameters** ``pos`` the type * to use as a loop cursor. ``head`` the head for your list. ``member`` the name of the list_head within the struct. **Description** Iterate over list of given type, continuing from current position.h](j)}(h**Parameters**h]j)}(hjih]h Parameters}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jhjiubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMnhjiubj&)}(hhh](j+)}(h,``pos`` the type * to use as a loop cursor. h](j1)}(h``pos``h]j$)}(hj4ih]hpos}(hj6ihhhNhNubah}(h]h ]h"]h$]h&]uh1j#hj2iubah}(h]h ]h"]h$]h&]uh1j0hS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMkhj.iubjK)}(hhh]j)}(h#the type * to use as a loop cursor.h]h#the type * to use as a loop cursor.}(hjMihhhNhNubah}(h]h ]h"]h$]h&]uh1hhjIihMkhjJiubah}(h]h ]h"]h$]h&]uh1jJhj.iubeh}(h]h ]h"]h$]h&]uh1j*hjIihMkhj+iubj+)}(h!``head`` the head for your list. h](j1)}(h``head``h]j$)}(hjmih]hhead}(hjoihhhNhNubah}(h]h ]h"]h$]h&]uh1j#hjkiubah}(h]h ]h"]h$]h&]uh1j0hS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMlhjgiubjK)}(hhh]j)}(hthe head for your list.h]hthe head for your list.}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1hhjihMlhjiubah}(h]h ]h"]h$]h&]uh1jJhjgiubeh}(h]h ]h"]h$]h&]uh1j*hjihMlhj+iubj+)}(h8``member`` the name of the list_head within the struct. h](j1)}(h ``member``h]j$)}(hjih]hmember}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1j#hjiubah}(h]h ]h"]h$]h&]uh1j0hS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMmhjiubjK)}(hhh]j)}(h,the name of the list_head within the struct.h]h,the name of the list_head within the struct.}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1hhjihMmhjiubah}(h]h ]h"]h$]h&]uh1jJhjiubeh}(h]h ]h"]h$]h&]uh1j*hjihMmhj+iubeh}(h]h ]h"]h$]h&]uh1j%hjiubj)}(h**Description**h]j)}(hjih]h Description}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jhjiubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMohjiubj)}(hBIterate over list of given type, continuing from current position.h]hBIterate over list of given type, continuing from current position.}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMnhjiubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj&hhhNhNubj8)}(hhh]h}(h]h ]h"]h$]h&]entries](jD*list_for_each_entry_from_reverse (C macro)"c.list_for_each_entry_from_reversehNtauh1j7hj&hhhNhNubjI)}(hhh](jN)}(h list_for_each_entry_from_reverseh]jT)}(h list_for_each_entry_from_reverseh]jZ)}(h list_for_each_entry_from_reverseh]j`)}(hj jh]h list_for_each_entry_from_reverse}(hj*jhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj&jubah}(h]h ](jrjseh"]h$]h&]hhuh1jYhj"jhhhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMvubah}(h]h ]h"]h$]h&]hhj~uh1jSjjhjjhhhj=jhMvubah}(h]jjah ](jjeh"]h$]h&]jj)jhuh1jMhj=jhMvhjjhhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhjjhhhj=jhMvubeh}(h]h ](jmacroeh"]h$]h&]jjjjVjjjVjjjjuh1jHhhhj&hNhNubj)}(h8``list_for_each_entry_from_reverse (pos, head, member)``h]j$)}(hj\jh]h4list_for_each_entry_from_reverse (pos, head, member)}(hj^jhhhNhNubah}(h]h ]h"]h$]h&]uh1j#hjZjubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMxhj&hhubj)}(hAiterate backwards over list of given type from the current point h]j)}(h@iterate backwards over list of given type from the current pointh]h@iterate backwards over list of given type from the current point}(hjvjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMvhjrjubah}(h]h ]h"]h$]h&]uh1jhjjhMvhj&hhubj)}(h**Parameters** ``pos`` the type * to use as a loop cursor. ``head`` the head for your list. ``member`` the name of the list_head within the struct. **Description** Iterate backwards over list of given type, continuing from current position.h](j)}(h**Parameters**h]j)}(hjjh]h Parameters}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjjubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMzhjjubj&)}(hhh](j+)}(h,``pos`` the type * to use as a loop cursor. h](j1)}(h``pos``h]j$)}(hjjh]hpos}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1j#hjjubah}(h]h ]h"]h$]h&]uh1j0hS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMxhjjubjK)}(hhh]j)}(h#the type * to use as a loop cursor.h]h#the type * to use as a loop cursor.}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjjhMxhjjubah}(h]h ]h"]h$]h&]uh1jJhjjubeh}(h]h ]h"]h$]h&]uh1j*hjjhMxhjjubj+)}(h!``head`` the head for your list. h](j1)}(h``head``h]j$)}(hjjh]hhead}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1j#hjjubah}(h]h ]h"]h$]h&]uh1j0hS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMyhjjubjK)}(hhh]j)}(hthe head for your list.h]hthe head for your list.}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjjhMyhjjubah}(h]h ]h"]h$]h&]uh1jJhjjubeh}(h]h ]h"]h$]h&]uh1j*hjjhMyhjjubj+)}(h8``member`` the name of the list_head within the struct. h](j1)}(h ``member``h]j$)}(hj"kh]hmember}(hj$khhhNhNubah}(h]h ]h"]h$]h&]uh1j#hj kubah}(h]h ]h"]h$]h&]uh1j0hS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMzhjkubjK)}(hhh]j)}(h,the name of the list_head within the struct.h]h,the name of the list_head within the struct.}(hj;khhhNhNubah}(h]h ]h"]h$]h&]uh1hhj7khMzhj8kubah}(h]h ]h"]h$]h&]uh1jJhjkubeh}(h]h ]h"]h$]h&]uh1j*hj7khMzhjjubeh}(h]h ]h"]h$]h&]uh1j%hjjubj)}(h**Description**h]j)}(hj]kh]h Description}(hj_khhhNhNubah}(h]h ]h"]h$]h&]uh1jhj[kubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhM|hjjubj)}(hLIterate backwards over list of given type, continuing from current position.h]hLIterate backwards over list of given type, continuing from current position.}(hjskhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhM{hjjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj&hhhNhNubj8)}(hhh]h}(h]h ]h"]h$]h&]entries](jD"list_for_each_entry_safe (C macro)c.list_for_each_entry_safehNtauh1j7hj&hhhNhNubjI)}(hhh](jN)}(hlist_for_each_entry_safeh]jT)}(hlist_for_each_entry_safeh]jZ)}(hlist_for_each_entry_safeh]j`)}(hjkh]hlist_for_each_entry_safe}(hjkhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjkubah}(h]h ](jrjseh"]h$]h&]hhuh1jYhjkhhhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMubah}(h]h ]h"]h$]h&]hhj~uh1jSjjhjkhhhjkhMubah}(h]jkah ](jjeh"]h$]h&]jj)jhuh1jMhjkhMhjkhhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhjkhhhjkhMubeh}(h]h ](jmacroeh"]h$]h&]jjjjkjjkjjjuh1jHhhhj&hNhNubj)}(h3``list_for_each_entry_safe (pos, n, head, member)``h]j$)}(hjkh]h/list_for_each_entry_safe (pos, n, head, member)}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1j#hjkubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhj&hhubj)}(hCiterate over list of given type safe against removal of list entry h]j)}(hBiterate over list of given type safe against removal of list entryh]hBiterate over list of given type safe against removal of list entry}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhjkubah}(h]h ]h"]h$]h&]uh1jhjlhMhj&hhubj)}(h**Parameters** ``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_head within the struct.h](j)}(h**Parameters**h]j)}(hj lh]h Parameters}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj lubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhjlubj&)}(hhh](j+)}(h,``pos`` the type * to use as a loop cursor. h](j1)}(h``pos``h]j$)}(hj,lh]hpos}(hj.lhhhNhNubah}(h]h ]h"]h$]h&]uh1j#hj*lubah}(h]h ]h"]h$]h&]uh1j0hS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhj&lubjK)}(hhh]j)}(h#the type * to use as a loop cursor.h]h#the type * to use as a loop cursor.}(hjElhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjAlhMhjBlubah}(h]h ]h"]h$]h&]uh1jJhj&lubeh}(h]h ]h"]h$]h&]uh1j*hjAlhMhj#lubj+)}(h1``n`` another type * to use as temporary storage h](j1)}(h``n``h]j$)}(hjelh]hn}(hjglhhhNhNubah}(h]h ]h"]h$]h&]uh1j#hjclubah}(h]h ]h"]h$]h&]uh1j0hS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhj_lubjK)}(hhh]j)}(h*another type * to use as temporary storageh]h*another type * to use as temporary storage}(hj~lhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjzlhMhj{lubah}(h]h ]h"]h$]h&]uh1jJhj_lubeh}(h]h ]h"]h$]h&]uh1j*hjzlhMhj#lubj+)}(h!``head`` the head for your list. h](j1)}(h``head``h]j$)}(hjlh]hhead}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1j#hjlubah}(h]h ]h"]h$]h&]uh1j0hS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhjlubjK)}(hhh]j)}(hthe head for your list.h]hthe head for your list.}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjlhMhjlubah}(h]h ]h"]h$]h&]uh1jJhjlubeh}(h]h ]h"]h$]h&]uh1j*hjlhMhj#lubj+)}(h7``member`` the name of the list_head within the struct.h](j1)}(h ``member``h]j$)}(hjlh]hmember}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1j#hjlubah}(h]h ]h"]h$]h&]uh1j0hS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhjlubjK)}(hhh]j)}(h,the name of the list_head within the struct.h]h,the name of the list_head within the struct.}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhjlubah}(h]h ]h"]h$]h&]uh1jJhjlubeh}(h]h ]h"]h$]h&]uh1j*hjlhMhj#lubeh}(h]h ]h"]h$]h&]uh1j%hjlubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj&hhhNhNubj8)}(hhh]h}(h]h ]h"]h$]h&]entries](jD+list_for_each_entry_safe_continue (C macro)#c.list_for_each_entry_safe_continuehNtauh1j7hj&hhhNhNubjI)}(hhh](jN)}(h!list_for_each_entry_safe_continueh]jT)}(h!list_for_each_entry_safe_continueh]jZ)}(h!list_for_each_entry_safe_continueh]j`)}(hj+mh]h!list_for_each_entry_safe_continue}(hj5mhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj1mubah}(h]h ](jrjseh"]h$]h&]hhuh1jYhj-mhhhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMubah}(h]h ]h"]h$]h&]hhj~uh1jSjjhj)mhhhjHmhMubah}(h]j$mah ](jjeh"]h$]h&]jj)jhuh1jMhjHmhMhj&mhhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhj&mhhhjHmhMubeh}(h]h ](jmacroeh"]h$]h&]jjjjamjjamjjjuh1jHhhhj&hNhNubj)}(h<``list_for_each_entry_safe_continue (pos, n, head, member)``h]j$)}(hjgmh]h8list_for_each_entry_safe_continue (pos, n, head, member)}(hjimhhhNhNubah}(h]h ]h"]h$]h&]uh1j#hjemubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhj&hhubj)}(h-continue list iteration safe against removal h]j)}(h,continue list iteration safe against removalh]h,continue list iteration safe against removal}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhj}mubah}(h]h ]h"]h$]h&]uh1jhjmhMhj&hhubj)}(hXG**Parameters** ``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_head within the struct. **Description** Iterate over list of given type, continuing after current point, safe against removal of list entry.h](j)}(h**Parameters**h]j)}(hjmh]h Parameters}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjmubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhjmubj&)}(hhh](j+)}(h,``pos`` the type * to use as a loop cursor. h](j1)}(h``pos``h]j$)}(hjmh]hpos}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1j#hjmubah}(h]h ]h"]h$]h&]uh1j0hS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhjmubjK)}(hhh]j)}(h#the type * to use as a loop cursor.h]h#the type * to use as a loop cursor.}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjmhMhjmubah}(h]h ]h"]h$]h&]uh1jJhjmubeh}(h]h ]h"]h$]h&]uh1j*hjmhMhjmubj+)}(h1``n`` another type * to use as temporary storage h](j1)}(h``n``h]j$)}(hjmh]hn}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1j#hjmubah}(h]h ]h"]h$]h&]uh1j0hS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhjmubjK)}(hhh]j)}(h*another type * to use as temporary storageh]h*another type * to use as temporary storage}(hj nhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj nhMhj nubah}(h]h ]h"]h$]h&]uh1jJhjmubeh}(h]h ]h"]h$]h&]uh1j*hj nhMhjmubj+)}(h!``head`` the head for your list. h](j1)}(h``head``h]j$)}(hj-nh]hhead}(hj/nhhhNhNubah}(h]h ]h"]h$]h&]uh1j#hj+nubah}(h]h ]h"]h$]h&]uh1j0hS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhj'nubjK)}(hhh]j)}(hthe head for your list.h]hthe head for your list.}(hjFnhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjBnhMhjCnubah}(h]h ]h"]h$]h&]uh1jJhj'nubeh}(h]h ]h"]h$]h&]uh1j*hjBnhMhjmubj+)}(h8``member`` the name of the list_head within the struct. h](j1)}(h ``member``h]j$)}(hjfnh]hmember}(hjhnhhhNhNubah}(h]h ]h"]h$]h&]uh1j#hjdnubah}(h]h ]h"]h$]h&]uh1j0hS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhj`nubjK)}(hhh]j)}(h,the name of the list_head within the struct.h]h,the name of the list_head within the struct.}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj{nhMhj|nubah}(h]h ]h"]h$]h&]uh1jJhj`nubeh}(h]h ]h"]h$]h&]uh1j*hj{nhMhjmubeh}(h]h ]h"]h$]h&]uh1j%hjmubj)}(h**Description**h]j)}(hjnh]h Description}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjnubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhjmubj)}(hdIterate over list of given type, continuing after current point, safe against removal of list entry.h]hdIterate over list of given type, continuing after current point, safe against removal of list entry.}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhjmubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj&hhhNhNubj8)}(hhh]h}(h]h ]h"]h$]h&]entries](jD'list_for_each_entry_safe_from (C macro)c.list_for_each_entry_safe_fromhNtauh1j7hj&hhhNhNubjI)}(hhh](jN)}(hlist_for_each_entry_safe_fromh]jT)}(hlist_for_each_entry_safe_fromh]jZ)}(hlist_for_each_entry_safe_fromh]j`)}(hjnh]hlist_for_each_entry_safe_from}(hjnhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjnubah}(h]h ](jrjseh"]h$]h&]hhuh1jYhjnhhhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMubah}(h]h ]h"]h$]h&]hhj~uh1jSjjhjnhhhjnhMubah}(h]jnah ](jjeh"]h$]h&]jj)jhuh1jMhjnhMhjnhhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhjnhhhjnhMubeh}(h]h ](jmacroeh"]h$]h&]jjjjojjojjjuh1jHhhhj&hNhNubj)}(h8``list_for_each_entry_safe_from (pos, n, head, member)``h]j$)}(hjoh]h4list_for_each_entry_safe_from (pos, n, head, member)}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1j#hjoubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhj&hhubj)}(h:iterate over list from current point safe against removal h]j)}(h9iterate over list from current point safe against removalh]h9iterate over list from current point safe against removal}(hj6ohhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhj2oubah}(h]h ]h"]h$]h&]uh1jhjDohMhj&hhubj)}(hX:**Parameters** ``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_head within the struct. **Description** Iterate over list of given type from current point, safe against removal of list entry.h](j)}(h**Parameters**h]j)}(hjQoh]h Parameters}(hjSohhhNhNubah}(h]h ]h"]h$]h&]uh1jhjOoubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhjKoubj&)}(hhh](j+)}(h,``pos`` the type * to use as a loop cursor. h](j1)}(h``pos``h]j$)}(hjpoh]hpos}(hjrohhhNhNubah}(h]h ]h"]h$]h&]uh1j#hjnoubah}(h]h ]h"]h$]h&]uh1j0hS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhjjoubjK)}(hhh]j)}(h#the type * to use as a loop cursor.h]h#the type * to use as a loop cursor.}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1hhjohMhjoubah}(h]h ]h"]h$]h&]uh1jJhjjoubeh}(h]h ]h"]h$]h&]uh1j*hjohMhjgoubj+)}(h1``n`` another type * to use as temporary storage h](j1)}(h``n``h]j$)}(hjoh]hn}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1j#hjoubah}(h]h ]h"]h$]h&]uh1j0hS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhjoubjK)}(hhh]j)}(h*another type * to use as temporary storageh]h*another type * to use as temporary storage}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1hhjohMhjoubah}(h]h ]h"]h$]h&]uh1jJhjoubeh}(h]h ]h"]h$]h&]uh1j*hjohMhjgoubj+)}(h!``head`` the head for your list. h](j1)}(h``head``h]j$)}(hjoh]hhead}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1j#hjoubah}(h]h ]h"]h$]h&]uh1j0hS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhjoubjK)}(hhh]j)}(hthe head for your list.h]hthe head for your list.}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1hhjohMhjoubah}(h]h ]h"]h$]h&]uh1jJhjoubeh}(h]h ]h"]h$]h&]uh1j*hjohMhjgoubj+)}(h8``member`` the name of the list_head within the struct. h](j1)}(h ``member``h]j$)}(hjph]hmember}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1j#hjpubah}(h]h ]h"]h$]h&]uh1j0hS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhjpubjK)}(hhh]j)}(h,the name of the list_head within the struct.h]h,the name of the list_head within the struct.}(hj4phhhNhNubah}(h]h ]h"]h$]h&]uh1hhj0phMhj1pubah}(h]h ]h"]h$]h&]uh1jJhjpubeh}(h]h ]h"]h$]h&]uh1j*hj0phMhjgoubeh}(h]h ]h"]h$]h&]uh1j%hjKoubj)}(h**Description**h]j)}(hjVph]h Description}(hjXphhhNhNubah}(h]h ]h"]h$]h&]uh1jhjTpubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhjKoubj)}(hWIterate over list of given type from current point, safe against removal of list entry.h]hWIterate over list of given type from current point, safe against removal of list entry.}(hjlphhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhjKoubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj&hhhNhNubj8)}(hhh]h}(h]h ]h"]h$]h&]entries](jD*list_for_each_entry_safe_reverse (C macro)"c.list_for_each_entry_safe_reversehNtauh1j7hj&hhhNhNubjI)}(hhh](jN)}(h list_for_each_entry_safe_reverseh]jT)}(h list_for_each_entry_safe_reverseh]jZ)}(h list_for_each_entry_safe_reverseh]j`)}(hjph]h list_for_each_entry_safe_reverse}(hjphhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjpubah}(h]h ](jrjseh"]h$]h&]hhuh1jYhjphhhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMubah}(h]h ]h"]h$]h&]hhj~uh1jSjjhjphhhjphMubah}(h]jpah ](jjeh"]h$]h&]jj)jhuh1jMhjphMhjphhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhjphhhjphMubeh}(h]h ](jmacroeh"]h$]h&]jjjjpjjpjjjuh1jHhhhj&hNhNubj)}(h;``list_for_each_entry_safe_reverse (pos, n, head, member)``h]j$)}(hjph]h7list_for_each_entry_safe_reverse (pos, n, head, member)}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1j#hjpubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhj&hhubj)}(h1iterate backwards over list safe against removal h]j)}(h0iterate backwards over list safe against removalh]h0iterate backwards over list safe against removal}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhjpubah}(h]h ]h"]h$]h&]uh1jhjphMhj&hhubj)}(hX1**Parameters** ``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_head within the struct. **Description** Iterate backwards over list of given type, safe against removal of list entry.h](j)}(h**Parameters**h]j)}(hjqh]h Parameters}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjqubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhjqubj&)}(hhh](j+)}(h,``pos`` the type * to use as a loop cursor. h](j1)}(h``pos``h]j$)}(hj%qh]hpos}(hj'qhhhNhNubah}(h]h ]h"]h$]h&]uh1j#hj#qubah}(h]h ]h"]h$]h&]uh1j0hS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhjqubjK)}(hhh]j)}(h#the type * to use as a loop cursor.h]h#the type * to use as a loop cursor.}(hj>qhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj:qhMhj;qubah}(h]h ]h"]h$]h&]uh1jJhjqubeh}(h]h ]h"]h$]h&]uh1j*hj:qhMhjqubj+)}(h1``n`` another type * to use as temporary storage h](j1)}(h``n``h]j$)}(hj^qh]hn}(hj`qhhhNhNubah}(h]h ]h"]h$]h&]uh1j#hj\qubah}(h]h ]h"]h$]h&]uh1j0hS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhjXqubjK)}(hhh]j)}(h*another type * to use as temporary storageh]h*another type * to use as temporary storage}(hjwqhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjsqhMhjtqubah}(h]h ]h"]h$]h&]uh1jJhjXqubeh}(h]h ]h"]h$]h&]uh1j*hjsqhMhjqubj+)}(h!``head`` the head for your list. h](j1)}(h``head``h]j$)}(hjqh]hhead}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1j#hjqubah}(h]h ]h"]h$]h&]uh1j0hS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhjqubjK)}(hhh]j)}(hthe head for your list.h]hthe head for your list.}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjqhMhjqubah}(h]h ]h"]h$]h&]uh1jJhjqubeh}(h]h ]h"]h$]h&]uh1j*hjqhMhjqubj+)}(h8``member`` the name of the list_head within the struct. h](j1)}(h ``member``h]j$)}(hjqh]hmember}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1j#hjqubah}(h]h ]h"]h$]h&]uh1j0hS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhjqubjK)}(hhh]j)}(h,the name of the list_head within the struct.h]h,the name of the list_head within the struct.}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjqhMhjqubah}(h]h ]h"]h$]h&]uh1jJhjqubeh}(h]h ]h"]h$]h&]uh1j*hjqhMhjqubeh}(h]h ]h"]h$]h&]uh1j%hjqubj)}(h**Description**h]j)}(hj rh]h Description}(hj rhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj rubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhjqubj)}(hNIterate backwards over list of given type, safe against removal of list entry.h]hNIterate backwards over list of given type, safe against removal of list entry.}(hj!rhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhjqubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj&hhhNhNubj8)}(hhh]h}(h]h ]h"]h$]h&]entries](jDlist_safe_reset_next (C macro)c.list_safe_reset_nexthNtauh1j7hj&hhhNhNubjI)}(hhh](jN)}(hlist_safe_reset_nexth]jT)}(hlist_safe_reset_nexth]jZ)}(hlist_safe_reset_nexth]j`)}(hjJrh]hlist_safe_reset_next}(hjTrhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjPrubah}(h]h ](jrjseh"]h$]h&]hhuh1jYhjLrhhhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMubah}(h]h ]h"]h$]h&]hhj~uh1jSjjhjHrhhhjgrhMubah}(h]jCrah ](jjeh"]h$]h&]jj)jhuh1jMhjgrhMhjErhhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhjErhhhjgrhMubeh}(h]h ](jmacroeh"]h$]h&]jjjjrjjrjjjuh1jHhhhj&hNhNubj)}(h)``list_safe_reset_next (pos, n, member)``h]j$)}(hjrh]h%list_safe_reset_next (pos, n, member)}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1j#hjrubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhj&hhubj)}(h,reset a stale list_for_each_entry_safe loop h]j)}(h+reset a stale list_for_each_entry_safe looph]h+reset a stale list_for_each_entry_safe loop}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhjrubah}(h]h ]h"]h$]h&]uh1jhjrhMhj&hhubj)}(hX)**Parameters** ``pos`` the loop cursor used in the list_for_each_entry_safe loop ``n`` temporary storage used in list_for_each_entry_safe ``member`` the name of the list_head within the struct. **Description** list_safe_reset_next is not safe to use in general if the list may be modified concurrently (eg. the lock is dropped in the loop body). An exception to this is if the cursor element (pos) is pinned in the list, and list_safe_reset_next is called after re-taking the lock and before completing the current iteration of the loop body.h](j)}(h**Parameters**h]j)}(hjrh]h Parameters}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjrubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhjrubj&)}(hhh](j+)}(hB``pos`` the loop cursor used in the list_for_each_entry_safe loop h](j1)}(h``pos``h]j$)}(hjrh]hpos}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1j#hjrubah}(h]h ]h"]h$]h&]uh1j0hS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhjrubjK)}(hhh]j)}(h9the loop cursor used in the list_for_each_entry_safe looph]h9the loop cursor used in the list_for_each_entry_safe loop}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjrhMhjrubah}(h]h ]h"]h$]h&]uh1jJhjrubeh}(h]h ]h"]h$]h&]uh1j*hjrhMhjrubj+)}(h9``n`` temporary storage used in list_for_each_entry_safe h](j1)}(h``n``h]j$)}(hjsh]hn}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1j#hjsubah}(h]h ]h"]h$]h&]uh1j0hS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhj subjK)}(hhh]j)}(h2temporary storage used in list_for_each_entry_safeh]h2temporary storage used in list_for_each_entry_safe}(hj,shhhNhNubah}(h]h ]h"]h$]h&]uh1hhj(shMhj)subah}(h]h ]h"]h$]h&]uh1jJhj subeh}(h]h ]h"]h$]h&]uh1j*hj(shMhjrubj+)}(h8``member`` the name of the list_head within the struct. h](j1)}(h ``member``h]j$)}(hjLsh]hmember}(hjNshhhNhNubah}(h]h ]h"]h$]h&]uh1j#hjJsubah}(h]h ]h"]h$]h&]uh1j0hS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhjFsubjK)}(hhh]j)}(h,the name of the list_head within the struct.h]h,the name of the list_head within the struct.}(hjeshhhNhNubah}(h]h ]h"]h$]h&]uh1hhjashMhjbsubah}(h]h ]h"]h$]h&]uh1jJhjFsubeh}(h]h ]h"]h$]h&]uh1j*hjashMhjrubeh}(h]h ]h"]h$]h&]uh1j%hjrubj)}(h**Description**h]j)}(hjsh]h Description}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jhjsubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhjrubj)}(hXLlist_safe_reset_next is not safe to use in general if the list may be modified concurrently (eg. the lock is dropped in the loop body). An exception to this is if the cursor element (pos) is pinned in the list, and list_safe_reset_next is called after re-taking the lock and before completing the current iteration of the loop body.h]hXLlist_safe_reset_next is not safe to use in general if the list may be modified concurrently (eg. the lock is dropped in the loop body). An exception to this is if the cursor element (pos) is pinned in the list, and list_safe_reset_next is called after re-taking the lock and before completing the current iteration of the loop body.}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhjrubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj&hhhNhNubj8)}(hhh]h}(h]h ]h"]h$]h&]entries](jDhlist_unhashed (C function)c.hlist_unhashedhNtauh1j7hj&hhhNhNubjI)}(hhh](jN)}(h/int hlist_unhashed (const struct hlist_node *h)h]jT)}(h.int hlist_unhashed(const struct hlist_node *h)h](j)}(hinth]hint}(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjshhhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMubj)}(h h]h }(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjshhhjshMubjZ)}(hhlist_unhashedh]j`)}(hhlist_unhashedh]hhlist_unhashed}(hjshhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjsubah}(h]h ](jrjseh"]h$]h&]hhuh1jYhjshhhjshMubj)}(h(const struct hlist_node *h)h]j)}(hconst struct hlist_node *hh](j)}(hjR)h]hconst}(hj thhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtubj)}(h h]h }(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtubj)}(hjh]hstruct}(hj$thhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtubj)}(h h]h }(hj1thhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtubh)}(hhh]j`)}(h hlist_nodeh]h hlist_node}(hjBthhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj?tubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjDtmodnameN classnameNjj)}j]j)}jjssbc.hlist_unhashedasbuh1hhjtubj)}(h h]h }(hjbthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtubj2)}(hjh]h*}(hjpthhhNhNubah}(h]h ]j=ah"]h$]h&]uh1j1hjtubj`)}(hhh]hh}(hj}thhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjtubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjtubah}(h]h ]h"]h$]h&]hhuh1jhjshhhjshMubeh}(h]h ]h"]h$]h&]hhj~uh1jSjjhjshhhjshMubah}(h]jsah ](jjeh"]h$]h&]jj)jhuh1jMhjshMhjshhubj)}(hhh]j)}(h2Has node been removed from list and reinitialized?h]h2Has node been removed from list and reinitialized?}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhjthhubah}(h]h ]h"]h$]h&]uh1jhjshhhjshMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjtjjtjjjuh1jHhhhj&hNhNubj)}(hX **Parameters** ``const struct hlist_node *h`` Node to be checked **Description** Not that not all removal functions will leave a node in unhashed state. For example, hlist_nulls_del_init_rcu() does leave the node in unhashed state, but hlist_nulls_del() does not.h](j)}(h**Parameters**h]j)}(hjth]h Parameters}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jhjtubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhjtubj&)}(hhh]j+)}(h2``const struct hlist_node *h`` Node to be checked h](j1)}(h``const struct hlist_node *h``h]j$)}(hjth]hconst struct hlist_node *h}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1j#hjtubah}(h]h ]h"]h$]h&]uh1j0hS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhjtubjK)}(hhh]j)}(hNode to be checkedh]hNode to be checked}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjthMhjtubah}(h]h ]h"]h$]h&]uh1jJhjtubeh}(h]h ]h"]h$]h&]uh1j*hjthMhjtubah}(h]h ]h"]h$]h&]uh1j%hjtubj)}(h**Description**h]j)}(hj#uh]h Description}(hj%uhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!uubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhjtubj)}(hNot that not all removal functions will leave a node in unhashed state. For example, hlist_nulls_del_init_rcu() does leave the node in unhashed state, but hlist_nulls_del() does not.h]hNot that not all removal functions will leave a node in unhashed state. For example, hlist_nulls_del_init_rcu() does leave the node in unhashed state, but hlist_nulls_del() does not.}(hj9uhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhjtubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj&hhhNhNubj8)}(hhh]h}(h]h ]h"]h$]h&]entries](jD$hlist_unhashed_lockless (C function)c.hlist_unhashed_locklesshNtauh1j7hj&hhhNhNubjI)}(hhh](jN)}(h8int hlist_unhashed_lockless (const struct hlist_node *h)h]jT)}(h7int hlist_unhashed_lockless(const struct hlist_node *h)h](j)}(hinth]hint}(hjhuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjduhhhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMubj)}(h h]h }(hjwuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjduhhhjvuhMubjZ)}(hhlist_unhashed_locklessh]j`)}(hhlist_unhashed_locklessh]hhlist_unhashed_lockless}(hjuhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjuubah}(h]h ](jrjseh"]h$]h&]hhuh1jYhjduhhhjvuhMubj)}(h(const struct hlist_node *h)h]j)}(hconst struct hlist_node *hh](j)}(hjR)h]hconst}(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuubj)}(h h]h }(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuubj)}(hjh]hstruct}(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuubj)}(h h]h }(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuubh)}(hhh]j`)}(h hlist_nodeh]h hlist_node}(hjuhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjuubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjumodnameN classnameNjj)}j]j)}jjusbc.hlist_unhashed_locklessasbuh1hhjuubj)}(h h]h }(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuubj2)}(hjh]h*}(hj vhhhNhNubah}(h]h ]j=ah"]h$]h&]uh1j1hjuubj`)}(hjth]hh}(hjvhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjuubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjuubah}(h]h ]h"]h$]h&]hhuh1jhjduhhhjvuhMubeh}(h]h ]h"]h$]h&]hhj~uh1jSjjhj`uhhhjvuhMubah}(h]j[uah ](jjeh"]h$]h&]jj)jhuh1jMhjvuhMhj]uhhubj)}(hhh]j)}(h*Version of hlist_unhashed for lockless useh]h*Version of hlist_unhashed for lockless use}(hjBvhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhj?vhhubah}(h]h ]h"]h$]h&]uh1jhj]uhhhjvuhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjZvjjZvjjjuh1jHhhhj&hNhNubj)}(hX**Parameters** ``const struct hlist_node *h`` Node to be checked **Description** This variant of hlist_unhashed() must be used in lockless contexts to avoid potential load-tearing. The READ_ONCE() is paired with the various WRITE_ONCE() in hlist helpers that are defined below.h](j)}(h**Parameters**h]j)}(hjdvh]h Parameters}(hjfvhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjbvubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhj^vubj&)}(hhh]j+)}(h2``const struct hlist_node *h`` Node to be checked h](j1)}(h``const struct hlist_node *h``h]j$)}(hjvh]hconst struct hlist_node *h}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1j#hjvubah}(h]h ]h"]h$]h&]uh1j0hS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhj}vubjK)}(hhh]j)}(hNode to be checkedh]hNode to be checked}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjvhMhjvubah}(h]h ]h"]h$]h&]uh1jJhj}vubeh}(h]h ]h"]h$]h&]uh1j*hjvhMhjzvubah}(h]h ]h"]h$]h&]uh1j%hj^vubj)}(h**Description**h]j)}(hjvh]h Description}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjvubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhj^vubj)}(hThis variant of hlist_unhashed() must be used in lockless contexts to avoid potential load-tearing. The READ_ONCE() is paired with the various WRITE_ONCE() in hlist helpers that are defined below.h]hThis variant of hlist_unhashed() must be used in lockless contexts to avoid potential load-tearing. The READ_ONCE() is paired with the various WRITE_ONCE() in hlist helpers that are defined below.}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhj^vubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj&hhhNhNubj8)}(hhh]h}(h]h ]h"]h$]h&]entries](jDhlist_empty (C function) c.hlist_emptyhNtauh1j7hj&hhhNhNubjI)}(hhh](jN)}(h,int hlist_empty (const struct hlist_head *h)h]jT)}(h+int hlist_empty(const struct hlist_head *h)h](j)}(hinth]hint}(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvhhhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMubj)}(h h]h }(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvhhhjwhMubjZ)}(h hlist_emptyh]j`)}(h hlist_emptyh]h hlist_empty}(hj$whhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj wubah}(h]h ](jrjseh"]h$]h&]hhuh1jYhjvhhhjwhMubj)}(h(const struct hlist_head *h)h]j)}(hconst struct hlist_head *hh](j)}(hjR)h]hconst}(hj@whhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhNhNubah}(h]h ]j=ah"]h$]h&]uh1j1hjubj`)}(hjkh]hn}(hjKhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubj)}(hstruct hlist_node *prevh](j)}(hjh]hstruct}(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_ubj)}(h h]h }(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_ubh)}(hhh]j`)}(h hlist_nodeh]h hlist_node}(hjhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj~ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j,c.hlist_add_behindasbuh1hhj_ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_ubj2)}(hjh]h*}(hjhhhNhNubah}(h]h ]j=ah"]h$]h&]uh1j1hj_ubj`)}(hprevh]hprev}(hjhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj_ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubeh}(h]h ]h"]h$]h&]hhuh1jhjhhhjhMGubeh}(h]h ]h"]h$]h&]hhj~uh1jSjjhjhhhjhMGubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jMhjhMGhjhhubj)}(hhh]j)}(h'add a new entry after the one specifiedh]h'add a new entry after the one specified}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMGhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMGubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jHhhhj&hNhNubj)}(h**Parameters** ``struct hlist_node *n`` new entry to be added ``struct hlist_node *prev`` hlist node to add it after, which must be non-NULLh](j)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMKhjubj&)}(hhh](j+)}(h/``struct hlist_node *n`` new entry to be added h](j1)}(h``struct hlist_node *n``h]j$)}(hj%h]hstruct hlist_node *n}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1j#hj#ubah}(h]h ]h"]h$]h&]uh1j0hS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMHhjubjK)}(hhh]j)}(hnew entry to be addedh]hnew entry to be added}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj:hMHhj;ubah}(h]h ]h"]h$]h&]uh1jJhjubeh}(h]h ]h"]h$]h&]uh1j*hj:hMHhjubj+)}(hN``struct hlist_node *prev`` hlist node to add it after, which must be non-NULLh](j1)}(h``struct hlist_node *prev``h]j$)}(hj^h]hstruct hlist_node *prev}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1j#hj\ubah}(h]h ]h"]h$]h&]uh1j0hS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMJhjXubjK)}(hhh]j)}(h2hlist node to add it after, which must be non-NULLh]h2hlist node to add it after, which must be non-NULL}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMIhjtubah}(h]h ]h"]h$]h&]uh1jJhjXubeh}(h]h ]h"]h$]h&]uh1j*hjshMJhjubeh}(h]h ]h"]h$]h&]uh1j%hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj&hhhNhNubj8)}(hhh]h}(h]h ]h"]h$]h&]entries](jDhlist_add_fake (C function)c.hlist_add_fakehNtauh1j7hj&hhhNhNubjI)}(hhh](jN)}(h*void hlist_add_fake (struct hlist_node *n)h]jT)}(h)void hlist_add_fake(struct hlist_node *n)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMWubj)}(h h]h }(hjǁhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjƁhMWubjZ)}(hhlist_add_fakeh]j`)}(hhlist_add_fakeh]hhlist_add_fake}(hjفhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjՁubah}(h]h ](jrjseh"]h$]h&]hhuh1jYhjhhhjƁhMWubj)}(h(struct hlist_node *n)h]j)}(hstruct hlist_node *nh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j`)}(h hlist_nodeh]h hlist_node}(hjhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jjہsbc.hlist_add_fakeasbuh1hhjubj)}(h h]h }(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj2)}(hjh]h*}(hjAhhhNhNubah}(h]h ]j=ah"]h$]h&]uh1j1hjubj`)}(hjkh]hn}(hjNhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubah}(h]h ]h"]h$]h&]hhuh1jhjhhhjƁhMWubeh}(h]h ]h"]h$]h&]hhj~uh1jSjjhjhhhjƁhMWubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jMhjƁhMWhjhhubj)}(hhh]j)}(h8create a fake hlist consisting of a single headless nodeh]h8create a fake hlist consisting of a single headless node}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMWhjthhubah}(h]h ]h"]h$]h&]uh1jhjhhhjƁhMWubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jHhhhj&hNhNubj)}(hX **Parameters** ``struct hlist_node *n`` Node to make a fake list out of **Description** This makes **n** appear to be its own predecessor on a headless hlist. The point of this is to allow things like hlist_del() to work correctly in cases where there is no list.h](j)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhM[hjubj&)}(hhh]j+)}(h9``struct hlist_node *n`` Node to make a fake list out of h](j1)}(h``struct hlist_node *n``h]j$)}(hjh]hstruct hlist_node *n}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j#hjubah}(h]h ]h"]h$]h&]uh1j0hS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMXhjubjK)}(hhh]j)}(hNode to make a fake list out ofh]hNode to make a fake list out of}(hjтhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj͂hMXhj΂ubah}(h]h ]h"]h$]h&]uh1jJhjubeh}(h]h ]h"]h$]h&]uh1j*hj͂hMXhjubah}(h]h ]h"]h$]h&]uh1j%hjubj)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMZhjubj)}(hThis makes **n** appear to be its own predecessor on a headless hlist. The point of this is to allow things like hlist_del() to work correctly in cases where there is no list.h](h This makes }(hj hhhNhNubj)}(h**n**h]hn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh appear to be its own predecessor on a headless hlist. The point of this is to allow things like hlist_del() to work correctly in cases where there is no list.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMYhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj&hhhNhNubj8)}(hhh]h}(h]h ]h"]h$]h&]entries](jDhlist_fake (C function) c.hlist_fakehNtauh1j7hj&hhhNhNubjI)}(hhh](jN)}(h&bool hlist_fake (struct hlist_node *h)h]jT)}(h%bool hlist_fake(struct hlist_node *h)h](j)}(hboolh]hbool}(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFhhhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMdubj)}(h h]h }(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFhhhjXhMdubjZ)}(h hlist_fakeh]j`)}(h hlist_fakeh]h hlist_fake}(hjkhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjgubah}(h]h ](jrjseh"]h$]h&]hhuh1jYhjFhhhjXhMdubj)}(h(struct hlist_node *h)h]j)}(hstruct hlist_node *hh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j`)}(h hlist_nodeh]h hlist_node}(hjhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jjmsb c.hlist_fakeasbuh1hhjubj)}(h h]h }(hjŃhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj2)}(hjh]h*}(hjӃhhhNhNubah}(h]h ]j=ah"]h$]h&]uh1j1hjubj`)}(hjth]hh}(hjhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubah}(h]h ]h"]h$]h&]hhuh1jhjFhhhjXhMdubeh}(h]h ]h"]h$]h&]hhj~uh1jSjjhjBhhhjXhMdubah}(h]j=ah ](jjeh"]h$]h&]jj)jhuh1jMhjXhMdhj?hhubj)}(hhh]j)}(hIs this node a fake hlist?h]hIs this node a fake hlist?}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMdhjhhubah}(h]h ]h"]h$]h&]uh1jhj?hhhjXhMdubeh}(h]h ](jfunctioneh"]h$]h&]jjjj!jj!jjjuh1jHhhhj&hNhNubj)}(ha**Parameters** ``struct hlist_node *h`` Node to check for being a self-referential fake hlist.h](j)}(h**Parameters**h]j)}(hj+h]h Parameters}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)ubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhhj%ubj&)}(hhh]j+)}(hO``struct hlist_node *h`` Node to check for being a self-referential fake hlist.h](j1)}(h``struct hlist_node *h``h]j$)}(hjJh]hstruct hlist_node *h}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1j#hjHubah}(h]h ]h"]h$]h&]uh1j0hS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMjhjDubjK)}(hhh]j)}(h6Node to check for being a self-referential fake hlist.h]h6Node to check for being a self-referential fake hlist.}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMehj`ubah}(h]h ]h"]h$]h&]uh1jJhjDubeh}(h]h ]h"]h$]h&]uh1j*hj_hMjhjAubah}(h]h ]h"]h$]h&]uh1j%hj%ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj&hhhNhNubj8)}(hhh]h}(h]h ]h"]h$]h&]entries](jD#hlist_is_singular_node (C function)c.hlist_is_singular_nodehNtauh1j7hj&hhhNhNubjI)}(hhh](jN)}(hHbool hlist_is_singular_node (struct hlist_node *n, struct hlist_head *h)h]jT)}(hGbool hlist_is_singular_node(struct hlist_node *n, struct hlist_head *h)h](j)}(hjLh]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMmubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMmubjZ)}(hhlist_is_singular_nodeh]j`)}(hhlist_is_singular_nodeh]hhlist_is_singular_node}(hjĄhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjubah}(h]h ](jrjseh"]h$]h&]hhuh1jYhjhhhjhMmubj)}(h,(struct hlist_node *n, struct hlist_head *h)h](j)}(hstruct hlist_node *nh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj܄ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj܄ubh)}(hhh]j`)}(h hlist_nodeh]h hlist_node}(hjhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jjƄsbc.hlist_is_singular_nodeasbuh1hhj܄ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj܄ubj2)}(hjh]h*}(hj,hhhNhNubah}(h]h ]j=ah"]h$]h&]uh1j1hj܄ubj`)}(hjkh]hn}(hj9hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj܄ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj؄ubj)}(hstruct hlist_head *hh](j)}(hjh]hstruct}(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMubj)}(h h]h }(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMubh)}(hhh]j`)}(h hlist_headh]h hlist_head}(hjohhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjlubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjqmodnameN classnameNjj)}j]jc.hlist_is_singular_nodeasbuh1hhjMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMubj2)}(hjh]h*}(hjhhhNhNubah}(h]h ]j=ah"]h$]h&]uh1j1hjMubj`)}(hjth]hh}(hjhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjMubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj؄ubeh}(h]h ]h"]h$]h&]hhuh1jhjhhhjhMmubeh}(h]h ]h"]h$]h&]hhj~uh1jSjjhjhhhjhMmubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jMhjhMmhjhhubj)}(hhh]j)}(h0is node the only element of the specified hlist?h]h0is node the only element of the specified hlist?}(hjхhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMmhj΅hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMmubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jHhhhj&hNhNubj)}(hX**Parameters** ``struct hlist_node *n`` Node to check for singularity. ``struct hlist_head *h`` Header for potentially singular list. **Description** Check whether the node is the only node of the head without accessing head, thus avoiding unnecessary cache misses.h](j)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMqhjubj&)}(hhh](j+)}(h8``struct hlist_node *n`` Node to check for singularity. h](j1)}(h``struct hlist_node *n``h]j$)}(hjh]hstruct hlist_node *n}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j#hjubah}(h]h ]h"]h$]h&]uh1j0hS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMnhj ubjK)}(hhh]j)}(hNode to check for singularity.h]hNode to check for singularity.}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj'hMnhj(ubah}(h]h ]h"]h$]h&]uh1jJhj ubeh}(h]h ]h"]h$]h&]uh1j*hj'hMnhj ubj+)}(h?``struct hlist_head *h`` Header for potentially singular list. h](j1)}(h``struct hlist_head *h``h]j$)}(hjKh]hstruct hlist_head *h}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1j#hjIubah}(h]h ]h"]h$]h&]uh1j0hS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMohjEubjK)}(hhh]j)}(h%Header for potentially singular list.h]h%Header for potentially singular list.}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj`hMohjaubah}(h]h ]h"]h$]h&]uh1jJhjEubeh}(h]h ]h"]h$]h&]uh1j*hj`hMohj ubeh}(h]h ]h"]h$]h&]uh1j%hjubj)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMqhjubj)}(hsCheck whether the node is the only node of the head without accessing head, thus avoiding unnecessary cache misses.h]hsCheck whether the node is the only node of the head without accessing head, thus avoiding unnecessary cache misses.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMphjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj&hhhNhNubj8)}(hhh]h}(h]h ]h"]h$]h&]entries](jDhlist_move_list (C function)c.hlist_move_listhNtauh1j7hj&hhhNhNubjI)}(hhh](jN)}(hEvoid hlist_move_list (struct hlist_head *old, struct hlist_head *new)h]jT)}(hDvoid hlist_move_list(struct hlist_head *old, struct hlist_head *new)h](j)}(hvoidh]hvoid}(hjˆhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdžhhhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhM{ubj)}(h h]h }(hjچhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdžhhhjنhM{ubjZ)}(hhlist_move_listh]j`)}(hhlist_move_listh]hhlist_move_list}(hjhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjubah}(h]h ](jrjseh"]h$]h&]hhuh1jYhjdžhhhjنhM{ubj)}(h0(struct hlist_head *old, struct hlist_head *new)h](j)}(hstruct hlist_head *oldh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j`)}(h hlist_headh]h hlist_head}(hj&hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj#ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj(modnameN classnameNjj)}j]j)}jjsbc.hlist_move_listasbuh1hhjubj)}(h h]h }(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj2)}(hjh]h*}(hjThhhNhNubah}(h]h ]j=ah"]h$]h&]uh1j1hjubj`)}(holdh]hold}(hjahhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubj)}(hstruct hlist_head *newh](j)}(hjh]hstruct}(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvubh)}(hhh]j`)}(h hlist_headh]h hlist_head}(hjhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jBc.hlist_move_listasbuh1hhjvubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvubj2)}(hjh]h*}(hjćhhhNhNubah}(h]h ]j=ah"]h$]h&]uh1j1hjvubj`)}(hnewh]hnew}(hjчhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjvubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubeh}(h]h ]h"]h$]h&]hhuh1jhjdžhhhjنhM{ubeh}(h]h ]h"]h$]h&]hhj~uh1jSjjhjÆhhhjنhM{ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jMhjنhM{hjhhubj)}(hhh]j)}(h Move an hlisth]h Move an hlist}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhM{hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjنhM{ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jHhhhj&hNhNubj)}(h**Parameters** ``struct hlist_head *old`` hlist_head for old list. ``struct hlist_head *new`` hlist_head for new list. **Description** Move a list from one list head to another. Fixup the pprev reference of the first entry if it exists.h](j)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhjubj&)}(hhh](j+)}(h4``struct hlist_head *old`` hlist_head for old list. h](j1)}(h``struct hlist_head *old``h]j$)}(hj<h]hstruct hlist_head *old}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1j#hj:ubah}(h]h ]h"]h$]h&]uh1j0hS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhM|hj6ubjK)}(hhh]j)}(hhlist_head for old list.h]hhlist_head for old list.}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjQhM|hjRubah}(h]h ]h"]h$]h&]uh1jJhj6ubeh}(h]h ]h"]h$]h&]uh1j*hjQhM|hj3ubj+)}(h4``struct hlist_head *new`` hlist_head for new list. h](j1)}(h``struct hlist_head *new``h]j$)}(hjuh]hstruct hlist_head *new}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1j#hjsubah}(h]h ]h"]h$]h&]uh1j0hS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhM}hjoubjK)}(hhh]j)}(hhlist_head for new list.h]hhlist_head for new list.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM}hjubah}(h]h ]h"]h$]h&]uh1jJhjoubeh}(h]h ]h"]h$]h&]uh1j*hjhM}hj3ubeh}(h]h ]h"]h$]h&]uh1j%hjubj)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhjubj)}(heMove a list from one list head to another. Fixup the pprev reference of the first entry if it exists.h]heMove a list from one list head to another. Fixup the pprev reference of the first entry if it exists.}(hjƈhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhM~hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj&hhhNhNubj8)}(hhh]h}(h]h ]h"]h$]h&]entries](jDhlist_splice_init (C function)c.hlist_splice_inithNtauh1j7hj&hhhNhNubjI)}(hhh](jN)}(h`void hlist_splice_init (struct hlist_head *from, struct hlist_node *last, struct hlist_head *to)h]jT)}(h_void hlist_splice_init(struct hlist_head *from, struct hlist_node *last, struct hlist_head *to)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubjZ)}(hhlist_splice_inith]j`)}(hhlist_splice_inith]hhlist_splice_init}(hjhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjubah}(h]h ](jrjseh"]h$]h&]hhuh1jYhjhhhjhMubj)}(hI(struct hlist_head *from, struct hlist_node *last, struct hlist_head *to)h](j)}(hstruct hlist_head *fromh](j)}(hjh]hstruct}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.ubj)}(h h]h }(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.ubh)}(hhh]j`)}(h hlist_headh]h hlist_head}(hjPhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjMubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjRmodnameN classnameNjj)}j]j)}jjsbc.hlist_splice_initasbuh1hhj.ubj)}(h h]h }(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.ubj2)}(hjh]h*}(hj~hhhNhNubah}(h]h ]j=ah"]h$]h&]uh1j1hj.ubj`)}(hfromh]hfrom}(hjhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj.ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj*ubj)}(hstruct hlist_node *lasth](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j`)}(h hlist_nodeh]h hlist_node}(hj‰hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjĉmodnameN classnameNjj)}j]jlc.hlist_splice_initasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj2)}(hjh]h*}(hjhhhNhNubah}(h]h ]j=ah"]h$]h&]uh1j1hjubj`)}(hlasth]hlast}(hjhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj*ubj)}(hstruct hlist_head *toh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j`)}(h hlist_headh]h hlist_head}(hj2hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj/ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj4modnameN classnameNjj)}j]jlc.hlist_splice_initasbuh1hhjubj)}(h h]h }(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj2)}(hjh]h*}(hj^hhhNhNubah}(h]h ]j=ah"]h$]h&]uh1j1hjubj`)}(htoh]hto}(hjkhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj*ubeh}(h]h ]h"]h$]h&]hhuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]hhj~uh1jSjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jMhjhMhjhhubj)}(hhh]j)}(h)move all entries from one list to anotherh]h)move all entries from one list to another}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jHhhhj&hNhNubj)}(hX/**Parameters** ``struct hlist_head *from`` hlist_head from which entries will be moved ``struct hlist_node *last`` last entry on the **from** list ``struct hlist_head *to`` hlist_head to which entries will be moved **Description** **to** can be empty, **from** must contain at least **last**.h](j)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhjubj&)}(hhh](j+)}(hH``struct hlist_head *from`` hlist_head from which entries will be moved h](j1)}(h``struct hlist_head *from``h]j$)}(hj֊h]hstruct hlist_head *from}(hj؊hhhNhNubah}(h]h ]h"]h$]h&]uh1j#hjԊubah}(h]h ]h"]h$]h&]uh1j0hS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhjЊubjK)}(hhh]j)}(h+hlist_head from which entries will be movedh]h+hlist_head from which entries will be moved}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jJhjЊubeh}(h]h ]h"]h$]h&]uh1j*hjhMhj͊ubj+)}(h<``struct hlist_node *last`` last entry on the **from** list h](j1)}(h``struct hlist_node *last``h]j$)}(hjh]hstruct hlist_node *last}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j#hj ubah}(h]h ]h"]h$]h&]uh1j0hS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhj ubjK)}(hhh]j)}(hlast entry on the **from** listh](hlast entry on the }(hj(hhhNhNubj)}(h**from**h]hfrom}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj(ubh list}(hj(hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj$hMhj%ubah}(h]h ]h"]h$]h&]uh1jJhj ubeh}(h]h ]h"]h$]h&]uh1j*hj$hMhj͊ubj+)}(hD``struct hlist_head *to`` hlist_head to which entries will be moved h](j1)}(h``struct hlist_head *to``h]j$)}(hjZh]hstruct hlist_head *to}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1j#hjXubah}(h]h ]h"]h$]h&]uh1j0hS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhjTubjK)}(hhh]j)}(h)hlist_head to which entries will be movedh]h)hlist_head to which entries will be moved}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1hhjohMhjpubah}(h]h ]h"]h$]h&]uh1jJhjTubeh}(h]h ]h"]h$]h&]uh1j*hjohMhj͊ubeh}(h]h ]h"]h$]h&]uh1j%hjubj)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhjubj)}(h=**to** can be empty, **from** must contain at least **last**.h](j)}(h**to**h]hto}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh can be empty, }(hjhhhNhNubj)}(h**from**h]hfrom}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh must contain at least }(hjhhhNhNubj)}(h**last**h]hlast}(hjӋhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj&hhhNhNubj8)}(hhh]h}(h]h ]h"]h$]h&]entries](jDhlist_for_each_entry (C macro)c.hlist_for_each_entryhNtauh1j7hj&hhhNhNubjI)}(hhh](jN)}(hhlist_for_each_entryh]jT)}(hhlist_for_each_entryh]jZ)}(hhlist_for_each_entryh]j`)}(hjh]hhlist_for_each_entry}(hjhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj ubah}(h]h ](jrjseh"]h$]h&]hhuh1jYhjhhhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMubah}(h]h ]h"]h$]h&]hhj~uh1jSjjhjhhhj#hMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jMhj#hMhjhhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhjhhhj#hMubeh}(h]h ](jmacroeh"]h$]h&]jjjj<jj<jjjuh1jHhhhj&hNhNubj)}(h,``hlist_for_each_entry (pos, head, member)``h]j$)}(hjBh]h(hlist_for_each_entry (pos, head, member)}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1j#hj@ubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhj&hhubj)}(h iterate over list of given type h]j)}(hiterate over list of given typeh]hiterate over list of given type}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhjXubah}(h]h ]h"]h$]h&]uh1jhjjhMhj&hhubj)}(h**Parameters** ``pos`` the type * to use as a loop cursor. ``head`` the head for your list. ``member`` the name of the hlist_node within the struct.h](j)}(h**Parameters**h]j)}(hjwh]h Parameters}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjuubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhjqubj&)}(hhh](j+)}(h,``pos`` the type * to use as a loop cursor. h](j1)}(h``pos``h]j$)}(hjh]hpos}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j#hjubah}(h]h ]h"]h$]h&]uh1j0hS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhjubjK)}(hhh]j)}(h#the type * to use as a loop cursor.h]h#the type * to use as a loop cursor.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jJhjubeh}(h]h ]h"]h$]h&]uh1j*hjhMhjubj+)}(h!``head`` the head for your list. h](j1)}(h``head``h]j$)}(hjόh]hhead}(hjьhhhNhNubah}(h]h ]h"]h$]h&]uh1j#hj͌ubah}(h]h ]h"]h$]h&]uh1j0hS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhjɌubjK)}(hhh]j)}(hthe head for your list.h]hthe head for your list.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jJhjɌubeh}(h]h ]h"]h$]h&]uh1j*hjhMhjubj+)}(h8``member`` the name of the hlist_node within the struct.h](j1)}(h ``member``h]j$)}(hjh]hmember}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j#hjubah}(h]h ]h"]h$]h&]uh1j0hS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhjubjK)}(hhh]j)}(h-the name of the hlist_node within the struct.h]h-the name of the hlist_node within the struct.}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhjubah}(h]h ]h"]h$]h&]uh1jJhjubeh}(h]h ]h"]h$]h&]uh1j*hjhMhjubeh}(h]h ]h"]h$]h&]uh1j%hjqubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj&hhhNhNubj8)}(hhh]h}(h]h ]h"]h$]h&]entries](jD'hlist_for_each_entry_continue (C macro)c.hlist_for_each_entry_continuehNtauh1j7hj&hhhNhNubjI)}(hhh](jN)}(hhlist_for_each_entry_continueh]jT)}(hhlist_for_each_entry_continueh]jZ)}(hhlist_for_each_entry_continueh]j`)}(hj\h]hhlist_for_each_entry_continue}(hjfhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjbubah}(h]h ](jrjseh"]h$]h&]hhuh1jYhj^hhhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMubah}(h]h ]h"]h$]h&]hhj~uh1jSjjhjZhhhjyhMubah}(h]jUah ](jjeh"]h$]h&]jj)jhuh1jMhjyhMhjWhhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhjWhhhjyhMubeh}(h]h ](jmacroeh"]h$]h&]jjjjjjjjjuh1jHhhhj&hNhNubj)}(h/``hlist_for_each_entry_continue (pos, member)``h]j$)}(hjh]h+hlist_for_each_entry_continue (pos, member)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j#hjubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhj&hhubj)}(h4iterate over a hlist continuing after current point h]j)}(h3iterate over a hlist continuing after current pointh]h3iterate over a hlist continuing after current point}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhjubah}(h]h ]h"]h$]h&]uh1jhjhMhj&hhubj)}(hy**Parameters** ``pos`` the type * to use as a loop cursor. ``member`` the name of the hlist_node within the struct.h](j)}(h**Parameters**h]j)}(hj͍h]h Parameters}(hjύhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjˍubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhjǍubj&)}(hhh](j+)}(h,``pos`` the type * to use as a loop cursor. h](j1)}(h``pos``h]j$)}(hjh]hpos}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j#hjubah}(h]h ]h"]h$]h&]uh1j0hS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhjubjK)}(hhh]j)}(h#the type * to use as a loop cursor.h]h#the type * to use as a loop cursor.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jJhjubeh}(h]h ]h"]h$]h&]uh1j*hjhMhjubj+)}(h8``member`` the name of the hlist_node within the struct.h](j1)}(h ``member``h]j$)}(hj%h]hmember}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1j#hj#ubah}(h]h ]h"]h$]h&]uh1j0hS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhjubjK)}(hhh]j)}(h-the name of the hlist_node within the struct.h]h-the name of the hlist_node within the struct.}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhj;ubah}(h]h ]h"]h$]h&]uh1jJhjubeh}(h]h ]h"]h$]h&]uh1j*hj:hMhjubeh}(h]h ]h"]h$]h&]uh1j%hjǍubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj&hhhNhNubj8)}(hhh]h}(h]h ]h"]h$]h&]entries](jD#hlist_for_each_entry_from (C macro)c.hlist_for_each_entry_fromhNtauh1j7hj&hhhNhNubjI)}(hhh](jN)}(hhlist_for_each_entry_fromh]jT)}(hhlist_for_each_entry_fromh]jZ)}(hhlist_for_each_entry_fromh]j`)}(hjyh]hhlist_for_each_entry_from}(hjhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjubah}(h]h ](jrjseh"]h$]h&]hhuh1jYhj{hhhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMubah}(h]h ]h"]h$]h&]hhj~uh1jSjjhjwhhhjhMubah}(h]jrah ](jjeh"]h$]h&]jj)jhuh1jMhjhMhjthhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhjthhhjhMubeh}(h]h ](jmacroeh"]h$]h&]jjjjjjjjjuh1jHhhhj&hNhNubj)}(h+``hlist_for_each_entry_from (pos, member)``h]j$)}(hjh]h'hlist_for_each_entry_from (pos, member)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j#hjubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhj&hhubj)}(h3iterate over a hlist continuing from current point h]j)}(h2iterate over a hlist continuing from current pointh]h2iterate over a hlist continuing from current point}(hjώhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhjˎubah}(h]h ]h"]h$]h&]uh1jhjݎhMhj&hhubj)}(hy**Parameters** ``pos`` the type * to use as a loop cursor. ``member`` the name of the hlist_node within the struct.h](j)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhjubj&)}(hhh](j+)}(h,``pos`` the type * to use as a loop cursor. h](j1)}(h``pos``h]j$)}(hj h]hpos}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j#hjubah}(h]h ]h"]h$]h&]uh1j0hS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhjubjK)}(hhh]j)}(h#the type * to use as a loop cursor.h]h#the type * to use as a loop cursor.}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jJhjubeh}(h]h ]h"]h$]h&]uh1j*hjhMhjubj+)}(h8``member`` the name of the hlist_node within the struct.h](j1)}(h ``member``h]j$)}(hjBh]hmember}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1j#hj@ubah}(h]h ]h"]h$]h&]uh1j0hS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhj<ubjK)}(hhh]j)}(h-the name of the hlist_node within the struct.h]h-the name of the hlist_node within the struct.}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhjXubah}(h]h ]h"]h$]h&]uh1jJhj<ubeh}(h]h ]h"]h$]h&]uh1j*hjWhMhjubeh}(h]h ]h"]h$]h&]uh1j%hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj&hhhNhNubj8)}(hhh]h}(h]h ]h"]h$]h&]entries](jD#hlist_for_each_entry_safe (C macro)c.hlist_for_each_entry_safehNtauh1j7hj&hhhNhNubjI)}(hhh](jN)}(hhlist_for_each_entry_safeh]jT)}(hhlist_for_each_entry_safeh]jZ)}(hhlist_for_each_entry_safeh]j`)}(hjh]hhlist_for_each_entry_safe}(hjhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjubah}(h]h ](jrjseh"]h$]h&]hhuh1jYhjhhhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMubah}(h]h ]h"]h$]h&]hhj~uh1jSjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jMhjhMhjhhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jmacroeh"]h$]h&]jjjj̏jj̏jjjuh1jHhhhj&hNhNubj)}(h4``hlist_for_each_entry_safe (pos, n, head, member)``h]j$)}(hjҏh]h0hlist_for_each_entry_safe (pos, n, head, member)}(hjԏhhhNhNubah}(h]h ]h"]h$]h&]uh1j#hjЏubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhj&hhubj)}(hCiterate over list of given type safe against removal of list entry h]j)}(hBiterate over list of given type safe against removal of list entryh]hBiterate over list of given type safe against removal of list entry}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhjubah}(h]h ]h"]h$]h&]uh1jhjhMhj&hhubj)}(h**Parameters** ``pos`` the type * to use as a loop cursor. ``n`` a :c:type:`struct hlist_node ` to use as temporary storage ``head`` the head for your list. ``member`` the name of the hlist_node within the struct.h](j)}(h**Parameters**h]j)}(hjh]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhjubj&)}(hhh](j+)}(h,``pos`` the type * to use as a loop cursor. h](j1)}(h``pos``h]j$)}(hj&h]hpos}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1j#hj$ubah}(h]h ]h"]h$]h&]uh1j0hS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhj ubjK)}(hhh]j)}(h#the type * to use as a loop cursor.h]h#the type * to use as a loop cursor.}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj;hMhj<ubah}(h]h ]h"]h$]h&]uh1jJhj ubeh}(h]h ]h"]h$]h&]uh1j*hj;hMhjubj+)}(hM``n`` a :c:type:`struct hlist_node ` to use as temporary storage h](j1)}(h``n``h]j$)}(hj_h]hn}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1j#hj]ubah}(h]h ]h"]h$]h&]uh1j0hS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhjYubjK)}(hhh]j)}(hFa :c:type:`struct hlist_node ` to use as temporary storageh](ha }(hjxhhhNhNubh)}(h(:c:type:`struct hlist_node `h]j$)}(hjh]hstruct hlist_node}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1j#hjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjj hlist_nodeuh1hhjthMhjxubh to use as temporary storage}(hjxhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjthMhjuubah}(h]h ]h"]h$]h&]uh1jJhjYubeh}(h]h ]h"]h$]h&]uh1j*hjthMhjubj+)}(h!``head`` the head for your list. h](j1)}(h``head``h]j$)}(hjh]hhead}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j#hjubah}(h]h ]h"]h$]h&]uh1j0hS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhjubjK)}(hhh]j)}(hthe head for your list.h]hthe head for your list.}(hjԐhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjАhMhjѐubah}(h]h ]h"]h$]h&]uh1jJhjubeh}(h]h ]h"]h$]h&]uh1j*hjАhMhjubj+)}(h8``member`` the name of the hlist_node within the struct.h](j1)}(h ``member``h]j$)}(hjh]hmember}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j#hjubah}(h]h ]h"]h$]h&]uh1j0hS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhjubjK)}(hhh]j)}(h-the name of the hlist_node within the struct.h]h-the name of the hlist_node within the struct.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhj ubah}(h]h ]h"]h$]h&]uh1jJhjubeh}(h]h ]h"]h$]h&]uh1j*hj hMhjubeh}(h]h ]h"]h$]h&]uh1j%hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj&hhhNhNubj8)}(hhh]h}(h]h ]h"]h$]h&]entries](jDhlist_count_nodes (C function)c.hlist_count_nodeshNtauh1j7hj&hhhNhNubjI)}(hhh](jN)}(h2size_t hlist_count_nodes (struct hlist_head *head)h]jT)}(h1size_t hlist_count_nodes(struct hlist_head *head)h](h)}(hhh]j`)}(hsize_th]hsize_t}(hjQhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjNubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjSmodnameN classnameNjj)}j]j)}jhlist_count_nodessbc.hlist_count_nodesasbuh1hhjJhhhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMubj)}(h h]h }(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJhhhjrhMubjZ)}(hhlist_count_nodesh]j`)}(hjoh]hhlist_count_nodes}(hjhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjubah}(h]h ](jrjseh"]h$]h&]hhuh1jYhjJhhhjrhMubj)}(h(struct hlist_head *head)h]j)}(hstruct hlist_head *headh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j`)}(h hlist_headh]h hlist_head}(hjhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jmc.hlist_count_nodesasbuh1hhjubj)}(h h]h }(hjܑhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj2)}(hjh]h*}(hjhhhNhNubah}(h]h ]j=ah"]h$]h&]uh1j1hjubj`)}(hheadh]hhead}(hjhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubah}(h]h ]h"]h$]h&]hhuh1jhjJhhhjrhMubeh}(h]h ]h"]h$]h&]hhj~uh1jSjjhjFhhhjrhMubah}(h]jAah ](jjeh"]h$]h&]jj)jhuh1jMhjrhMhjChhubj)}(hhh]j)}(hcount nodes in the hlisth]hcount nodes in the hlist}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jhjChhhjrhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj9jj9jjjuh1jHhhhj&hNhNubj)}(hF**Parameters** ``struct hlist_head *head`` the head for your hlist.h](j)}(h**Parameters**h]j)}(hjCh]h Parameters}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjAubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhj=ubj&)}(hhh]j+)}(h4``struct hlist_head *head`` the head for your hlist.h](j1)}(h``struct hlist_head *head``h]j$)}(hjbh]hstruct hlist_head *head}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1j#hj`ubah}(h]h ]h"]h$]h&]uh1j0hS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhj\ubjK)}(hhh]j)}(hthe head for your hlist.h]hthe head for your hlist.}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/list:775: ./include/linux/list.hhMhjxubah}(h]h ]h"]h$]h&]uh1jJhj\ubeh}(h]h ]h"]h$]h&]uh1j*hjwhMhjYubah}(h]h ]h"]h$]h&]uh1j%hj=ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj&hhhNhNubeh}(h]jah ]h"] full list apiah$]h&]uh1hhhhhhhhMubh)}(hhh](h)}(hPrivate List APIh]hPrivate List API}(hjhhhNhNubah}(h]h ]h"]h$]h&]hjuh1hhjhhhhhM ubj)}(hProvides a set of list primitives identical in function to those in ````, but designed for cases where the embedded ``:c:type:`struct list_head ``` is private member.h](hDProvides a set of list primitives identical in function to those in }(hjhhhNhNubj$)}(h````h]h}(hjÒhhhNhNubah}(h]h ]h"]h$]h&]uh1j#hjubh,, but designed for cases where the embedded }(hjhhhNhNubj$)}(h*``:c:type:`struct list_head ```h]h&:c:type:`struct list_head `}(hjՒhhhNhNubah}(h]h ]h"]h$]h&]uh1j#hjubh is private member.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/core-api/list:781: ./include/linux/list_private.hhK hjhhubj8)}(hhh]h}(h]h ]h"]h$]h&]entries](jDlist_private_entry (C macro)c.list_private_entryhNtauh1j7hjhhhNhNubjI)}(hhh](jN)}(hlist_private_entryh]jT)}(hlist_private_entryh]jZ)}(hlist_private_entryh]j`)}(hjh]hlist_private_entry}(hj hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjubah}(h]h ](jrjseh"]h$]h&]hhuh1jYhjhhh[/var/lib/git/docbuild/linux/Documentation/core-api/list:784: ./include/linux/list_private.hhKubah}(h]h ]h"]h$]h&]hhj~uh1jSjjhjhhhjhKubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jMhjhKhjhhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhjhhhjhKubeh}(h]h ](jmacroeh"]h$]h&]jjjj7jj7jjjuh1jHhhhjhNhNubj)}(h*``list_private_entry (ptr, type, member)``h]j$)}(hj=h]h&list_private_entry (ptr, type, member)}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1j#hj;ubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/core-api/list:784: ./include/linux/list_private.hhKhjhhubj)}(hget the struct for this entry h]j)}(hget the struct for this entryh]hget the struct for this entry}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/core-api/list:784: ./include/linux/list_private.hhKhjSubah}(h]h ]h"]h$]h&]uh1jhjehKhjhhubj)}(h**Parameters** ``ptr`` the :c:type:`struct list_head ` pointer. ``type`` the type of the struct this is embedded in. ``member`` the identifier passed to ACCESS_PRIVATE.h](j)}(h**Parameters**h]j)}(hjrh]h Parameters}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jhjpubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/core-api/list:784: ./include/linux/list_private.hhKhjlubj&)}(hhh](j+)}(h<``ptr`` the :c:type:`struct list_head ` pointer. h](j1)}(h``ptr``h]j$)}(hjh]hptr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j#hjubah}(h]h ]h"]h$]h&]uh1j0h[/var/lib/git/docbuild/linux/Documentation/core-api/list:784: ./include/linux/list_private.hhKhjubjK)}(hhh]j)}(h3the :c:type:`struct list_head ` pointer.h](hthe }(hjhhhNhNubh)}(h&:c:type:`struct list_head `h]j$)}(hjh]hstruct list_head}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1j#hjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjj list_headuh1hhjhKhjubh pointer.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jJhjubeh}(h]h ]h"]h$]h&]uh1j*hjhKhjubj+)}(h5``type`` the type of the struct this is embedded in. h](j1)}(h``type``h]j$)}(hjh]htype}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j#hjubah}(h]h ]h"]h$]h&]uh1j0h[/var/lib/git/docbuild/linux/Documentation/core-api/list:784: ./include/linux/list_private.hhKhjubjK)}(hhh]j)}(h+the type of the struct this is embedded in.h]h+the type of the struct this is embedded in.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jJhjubeh}(h]h ]h"]h$]h&]uh1j*hjhKhjubj+)}(h3``member`` the identifier passed to ACCESS_PRIVATE.h](j1)}(h ``member``h]j$)}(hj&h]hmember}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1j#hj$ubah}(h]h ]h"]h$]h&]uh1j0h[/var/lib/git/docbuild/linux/Documentation/core-api/list:784: ./include/linux/list_private.hhKhj ubjK)}(hhh]j)}(h(the identifier passed to ACCESS_PRIVATE.h]h(the identifier passed to ACCESS_PRIVATE.}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/core-api/list:784: ./include/linux/list_private.hhKhj<ubah}(h]h ]h"]h$]h&]uh1jJhj ubeh}(h]h ]h"]h$]h&]uh1j*hj;hKhjubeh}(h]h ]h"]h$]h&]uh1j%hjlubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj8)}(hhh]h}(h]h ]h"]h$]h&]entries](jD"list_private_first_entry (C macro)c.list_private_first_entryhNtauh1j7hjhhhNhNubjI)}(hhh](jN)}(hlist_private_first_entryh]jT)}(hlist_private_first_entryh]jZ)}(hlist_private_first_entryh]j`)}(hjzh]hlist_private_first_entry}(hjhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjubah}(h]h ](jrjseh"]h$]h&]hhuh1jYhj|hhh[/var/lib/git/docbuild/linux/Documentation/core-api/list:784: ./include/linux/list_private.hhK$ubah}(h]h ]h"]h$]h&]hhj~uh1jSjjhjxhhhjhK$ubah}(h]jsah ](jjeh"]h$]h&]jj)jhuh1jMhjhK$hjuhhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhjuhhhjhK$ubeh}(h]h ](jmacroeh"]h$]h&]jjjjjjjjjuh1jHhhhjhNhNubj)}(h0``list_private_first_entry (ptr, type, member)``h]j$)}(hjh]h,list_private_first_entry (ptr, type, member)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j#hjubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/core-api/list:784: ./include/linux/list_private.hhK&hjhhubj)}(h"get the first element from a list h]j)}(h!get the first element from a listh]h!get the first element from a list}(hjДhhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/core-api/list:784: ./include/linux/list_private.hhK$hj̔ubah}(h]h ]h"]h$]h&]uh1jhjޔhK$hjhhubj)}(h**Parameters** ``ptr`` the list head to take the element from. ``type`` the type of the struct this is embedded in. ``member`` the identifier passed to ACCESS_PRIVATE.h](j)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/core-api/list:784: ./include/linux/list_private.hhK(hjubj&)}(hhh](j+)}(h0``ptr`` the list head to take the element from. h](j1)}(h``ptr``h]j$)}(hj h]hptr}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j#hjubah}(h]h ]h"]h$]h&]uh1j0h[/var/lib/git/docbuild/linux/Documentation/core-api/list:784: ./include/linux/list_private.hhK%hjubjK)}(hhh]j)}(h'the list head to take the element from.h]h'the list head to take the element from.}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhK%hj ubah}(h]h ]h"]h$]h&]uh1jJhjubeh}(h]h ]h"]h$]h&]uh1j*hjhK%hjubj+)}(h5``type`` the type of the struct this is embedded in. h](j1)}(h``type``h]j$)}(hjCh]htype}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1j#hjAubah}(h]h ]h"]h$]h&]uh1j0h[/var/lib/git/docbuild/linux/Documentation/core-api/list:784: ./include/linux/list_private.hhK&hj=ubjK)}(hhh]j)}(h+the type of the struct this is embedded in.h]h+the type of the struct this is embedded in.}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjXhK&hjYubah}(h]h ]h"]h$]h&]uh1jJhj=ubeh}(h]h ]h"]h$]h&]uh1j*hjXhK&hjubj+)}(h3``member`` the identifier passed to ACCESS_PRIVATE.h](j1)}(h ``member``h]j$)}(hj|h]hmember}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1j#hjzubah}(h]h ]h"]h$]h&]uh1j0h[/var/lib/git/docbuild/linux/Documentation/core-api/list:784: ./include/linux/list_private.hhK(hjvubjK)}(hhh]j)}(h(the identifier passed to ACCESS_PRIVATE.h]h(the identifier passed to ACCESS_PRIVATE.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/core-api/list:784: ./include/linux/list_private.hhK'hjubah}(h]h ]h"]h$]h&]uh1jJhjvubeh}(h]h ]h"]h$]h&]uh1j*hjhK(hjubeh}(h]h ]h"]h$]h&]uh1j%hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj8)}(hhh]h}(h]h ]h"]h$]h&]entries](jD!list_private_last_entry (C macro)c.list_private_last_entryhNtauh1j7hjhhhNhNubjI)}(hhh](jN)}(hlist_private_last_entryh]jT)}(hlist_private_last_entryh]jZ)}(hlist_private_last_entryh]j`)}(hjЕh]hlist_private_last_entry}(hjڕhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj֕ubah}(h]h ](jrjseh"]h$]h&]hhuh1jYhjҕhhh[/var/lib/git/docbuild/linux/Documentation/core-api/list:784: ./include/linux/list_private.hhK-ubah}(h]h ]h"]h$]h&]hhj~uh1jSjjhjΕhhhjhK-ubah}(h]jɕah ](jjeh"]h$]h&]jj)jhuh1jMhjhK-hj˕hhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhj˕hhhjhK-ubeh}(h]h ](jmacroeh"]h$]h&]jjjjjjjjjuh1jHhhhjhNhNubj)}(h/``list_private_last_entry (ptr, type, member)``h]j$)}(hj h]h+list_private_last_entry (ptr, type, member)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j#hj ubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/core-api/list:784: ./include/linux/list_private.hhK/hjhhubj)}(h!get the last element from a list h]j)}(h get the last element from a listh]h get the last element from a list}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/core-api/list:784: ./include/linux/list_private.hhK-hj"ubah}(h]h ]h"]h$]h&]uh1jhj4hK-hjhhubj)}(h**Parameters** ``ptr`` the list head to take the element from. ``type`` the type of the struct this is embedded in. ``member`` the identifier passed to ACCESS_PRIVATE.h](j)}(h**Parameters**h]j)}(hjAh]h Parameters}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jhj?ubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/core-api/list:784: ./include/linux/list_private.hhK1hj;ubj&)}(hhh](j+)}(h0``ptr`` the list head to take the element from. h](j1)}(h``ptr``h]j$)}(hj`h]hptr}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1j#hj^ubah}(h]h ]h"]h$]h&]uh1j0h[/var/lib/git/docbuild/linux/Documentation/core-api/list:784: ./include/linux/list_private.hhK.hjZubjK)}(hhh]j)}(h'the list head to take the element from.h]h'the list head to take the element from.}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjuhK.hjvubah}(h]h ]h"]h$]h&]uh1jJhjZubeh}(h]h ]h"]h$]h&]uh1j*hjuhK.hjWubj+)}(h5``type`` the type of the struct this is embedded in. h](j1)}(h``type``h]j$)}(hjh]htype}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j#hjubah}(h]h ]h"]h$]h&]uh1j0h[/var/lib/git/docbuild/linux/Documentation/core-api/list:784: ./include/linux/list_private.hhK/hjubjK)}(hhh]j)}(h+the type of the struct this is embedded in.h]h+the type of the struct this is embedded in.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhK/hjubah}(h]h ]h"]h$]h&]uh1jJhjubeh}(h]h ]h"]h$]h&]uh1j*hjhK/hjWubj+)}(h3``member`` the identifier passed to ACCESS_PRIVATE.h](j1)}(h ``member``h]j$)}(hjҖh]hmember}(hjԖhhhNhNubah}(h]h ]h"]h$]h&]uh1j#hjЖubah}(h]h ]h"]h$]h&]uh1j0h[/var/lib/git/docbuild/linux/Documentation/core-api/list:784: ./include/linux/list_private.hhK1hj̖ubjK)}(hhh]j)}(h(the identifier passed to ACCESS_PRIVATE.h]h(the identifier passed to ACCESS_PRIVATE.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/core-api/list:784: ./include/linux/list_private.hhK0hjubah}(h]h ]h"]h$]h&]uh1jJhj̖ubeh}(h]h ]h"]h$]h&]uh1j*hjhK1hjWubeh}(h]h ]h"]h$]h&]uh1j%hj;ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj8)}(hhh]h}(h]h ]h"]h$]h&]entries](jD!list_private_next_entry (C macro)c.list_private_next_entryhNtauh1j7hjhhhNhNubjI)}(hhh](jN)}(hlist_private_next_entryh]jT)}(hlist_private_next_entryh]jZ)}(hlist_private_next_entryh]j`)}(hj&h]hlist_private_next_entry}(hj0hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj,ubah}(h]h ](jrjseh"]h$]h&]hhuh1jYhj(hhh[/var/lib/git/docbuild/linux/Documentation/core-api/list:784: ./include/linux/list_private.hhK6ubah}(h]h ]h"]h$]h&]hhj~uh1jSjjhj$hhhjChK6ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jMhjChK6hj!hhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhj!hhhjChK6ubeh}(h]h ](jmacroeh"]h$]h&]jjjj\jj\jjjuh1jHhhhjhNhNubj)}(h)``list_private_next_entry (pos, member)``h]j$)}(hjbh]h%list_private_next_entry (pos, member)}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1j#hj`ubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/core-api/list:784: ./include/linux/list_private.hhK8hjhhubj)}(hget the next element in list h]j)}(hget the next element in listh]hget the next element in list}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/core-api/list:784: ./include/linux/list_private.hhK6hjxubah}(h]h ]h"]h$]h&]uh1jhjhK6hjhhubj)}(hi**Parameters** ``pos`` the type * to cursor ``member`` the name of the list_head within the struct.h](j)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/core-api/list:784: ./include/linux/list_private.hhK:hjubj&)}(hhh](j+)}(h``pos`` the type * to cursor h](j1)}(h``pos``h]j$)}(hjh]hpos}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j#hjubah}(h]h ]h"]h$]h&]uh1j0h[/var/lib/git/docbuild/linux/Documentation/core-api/list:784: ./include/linux/list_private.hhK7hjubjK)}(hhh]j)}(hthe type * to cursorh]hthe type * to cursor}(hjϗhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj˗hK7hj̗ubah}(h]h ]h"]h$]h&]uh1jJhjubeh}(h]h ]h"]h$]h&]uh1j*hj˗hK7hjubj+)}(h7``member`` the name of the list_head within the struct.h](j1)}(h ``member``h]j$)}(hjh]hmember}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j#hjubah}(h]h ]h"]h$]h&]uh1j0h[/var/lib/git/docbuild/linux/Documentation/core-api/list:784: ./include/linux/list_private.hhK9hjubjK)}(hhh]j)}(h,the name of the list_head within the struct.h]h,the name of the list_head within the struct.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/core-api/list:784: ./include/linux/list_private.hhK8hjubah}(h]h ]h"]h$]h&]uh1jJhjubeh}(h]h ]h"]h$]h&]uh1j*hjhK9hjubeh}(h]h ]h"]h$]h&]uh1j%hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj8)}(hhh]h}(h]h ]h"]h$]h&]entries](jD*list_private_next_entry_circular (C macro)"c.list_private_next_entry_circularhNtauh1j7hjhhhNhNubjI)}(hhh](jN)}(h list_private_next_entry_circularh]jT)}(h list_private_next_entry_circularh]jZ)}(h list_private_next_entry_circularh]j`)}(hjCh]h list_private_next_entry_circular}(hjMhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjIubah}(h]h ](jrjseh"]h$]h&]hhuh1jYhjEhhh[/var/lib/git/docbuild/linux/Documentation/core-api/list:784: ./include/linux/list_private.hhK>ubah}(h]h ]h"]h$]h&]hhj~uh1jSjjhjAhhhj`hK>ubah}(h]j<ah ](jjeh"]h$]h&]jj)jhuh1jMhj`hK>hj>hhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhj>hhhj`hK>ubeh}(h]h ](jmacroeh"]h$]h&]jjjjyjjyjjjuh1jHhhhjhNhNubj)}(h8``list_private_next_entry_circular (pos, head, member)``h]j$)}(hjh]h4list_private_next_entry_circular (pos, head, member)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j#hj}ubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/core-api/list:784: ./include/linux/list_private.hhK@hjhhubj)}(hget the next element in list h]j)}(hget the next element in listh]hget the next element in list}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/core-api/list:784: ./include/linux/list_private.hhK>hjubah}(h]h ]h"]h$]h&]uh1jhjhK>hjhhubj)}(hX**Parameters** ``pos`` the type * to cursor. ``head`` the list head to take the element from. ``member`` the name of the list_head within the struct. **Description** Wraparound if pos is the last element (return the first element). Note, that list is expected to be not empty.h](j)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/core-api/list:784: ./include/linux/list_private.hhKBhjubj&)}(hhh](j+)}(h``pos`` the type * to cursor. h](j1)}(h``pos``h]j$)}(hjӘh]hpos}(hj՘hhhNhNubah}(h]h ]h"]h$]h&]uh1j#hjјubah}(h]h ]h"]h$]h&]uh1j0h[/var/lib/git/docbuild/linux/Documentation/core-api/list:784: ./include/linux/list_private.hhK?hj͘ubjK)}(hhh]j)}(hthe type * to cursor.h]hthe type * to cursor.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhK?hjubah}(h]h ]h"]h$]h&]uh1jJhj͘ubeh}(h]h ]h"]h$]h&]uh1j*hjhK?hjʘubj+)}(h1``head`` the list head to take the element from. h](j1)}(h``head``h]j$)}(hj h]hhead}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j#hj ubah}(h]h ]h"]h$]h&]uh1j0h[/var/lib/git/docbuild/linux/Documentation/core-api/list:784: ./include/linux/list_private.hhK@hjubjK)}(hhh]j)}(h'the list head to take the element from.h]h'the list head to take the element from.}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj!hK@hj"ubah}(h]h ]h"]h$]h&]uh1jJhjubeh}(h]h ]h"]h$]h&]uh1j*hj!hK@hjʘubj+)}(h8``member`` the name of the list_head within the struct. h](j1)}(h ``member``h]j$)}(hjEh]hmember}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1j#hjCubah}(h]h ]h"]h$]h&]uh1j0h[/var/lib/git/docbuild/linux/Documentation/core-api/list:784: ./include/linux/list_private.hhKAhj?ubjK)}(hhh]j)}(h,the name of the list_head within the struct.h]h,the name of the list_head within the struct.}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjZhKAhj[ubah}(h]h ]h"]h$]h&]uh1jJhj?ubeh}(h]h ]h"]h$]h&]uh1j*hjZhKAhjʘubeh}(h]h ]h"]h$]h&]uh1j%hjubj)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj~ubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/core-api/list:784: ./include/linux/list_private.hhKChjubj)}(hnWraparound if pos is the last element (return the first element). Note, that list is expected to be not empty.h]hnWraparound if pos is the last element (return the first element). Note, that list is expected to be not empty.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/core-api/list:784: ./include/linux/list_private.hhKBhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj8)}(hhh]h}(h]h ]h"]h$]h&]entries](jD!list_private_prev_entry (C macro)c.list_private_prev_entryhNtauh1j7hjhhhNhNubjI)}(hhh](jN)}(hlist_private_prev_entryh]jT)}(hlist_private_prev_entryh]jZ)}(hlist_private_prev_entryh]j`)}(hjh]hlist_private_prev_entry}(hjəhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjřubah}(h]h ](jrjseh"]h$]h&]hhuh1jYhjhhh[/var/lib/git/docbuild/linux/Documentation/core-api/list:784: ./include/linux/list_private.hhKLubah}(h]h ]h"]h$]h&]hhj~uh1jSjjhjhhhjܙhKLubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jMhjܙhKLhjhhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhjhhhjܙhKLubeh}(h]h ](jmacroeh"]h$]h&]jjjjjjjjjuh1jHhhhjhNhNubj)}(h)``list_private_prev_entry (pos, member)``h]j$)}(hjh]h%list_private_prev_entry (pos, member)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j#hjubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/core-api/list:784: ./include/linux/list_private.hhKNhjhhubj)}(hget the prev element in list h]j)}(hget the prev element in listh]hget the prev element in list}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/core-api/list:784: ./include/linux/list_private.hhKLhjubah}(h]h ]h"]h$]h&]uh1jhj#hKLhjhhubj)}(hi**Parameters** ``pos`` the type * to cursor ``member`` the name of the list_head within the struct.h](j)}(h**Parameters**h]j)}(hj0h]h Parameters}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj.ubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/core-api/list:784: ./include/linux/list_private.hhKPhj*ubj&)}(hhh](j+)}(h``pos`` the type * to cursor h](j1)}(h``pos``h]j$)}(hjOh]hpos}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1j#hjMubah}(h]h ]h"]h$]h&]uh1j0h[/var/lib/git/docbuild/linux/Documentation/core-api/list:784: ./include/linux/list_private.hhKMhjIubjK)}(hhh]j)}(hthe type * to cursorh]hthe type * to cursor}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjdhKMhjeubah}(h]h ]h"]h$]h&]uh1jJhjIubeh}(h]h ]h"]h$]h&]uh1j*hjdhKMhjFubj+)}(h7``member`` the name of the list_head within the struct.h](j1)}(h ``member``h]j$)}(hjh]hmember}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j#hjubah}(h]h ]h"]h$]h&]uh1j0h[/var/lib/git/docbuild/linux/Documentation/core-api/list:784: ./include/linux/list_private.hhKOhjubjK)}(hhh]j)}(h,the name of the list_head within the struct.h]h,the name of the list_head within the struct.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/core-api/list:784: ./include/linux/list_private.hhKNhjubah}(h]h ]h"]h$]h&]uh1jJhjubeh}(h]h ]h"]h$]h&]uh1j*hjhKOhjFubeh}(h]h ]h"]h$]h&]uh1j%hj*ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj8)}(hhh]h}(h]h ]h"]h$]h&]entries](jD*list_private_prev_entry_circular (C macro)"c.list_private_prev_entry_circularhNtauh1j7hjhhhNhNubjI)}(hhh](jN)}(h list_private_prev_entry_circularh]jT)}(h list_private_prev_entry_circularh]jZ)}(h list_private_prev_entry_circularh]j`)}(hjܚh]h list_private_prev_entry_circular}(hjhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjubah}(h]h ](jrjseh"]h$]h&]hhuh1jYhjޚhhh[/var/lib/git/docbuild/linux/Documentation/core-api/list:784: ./include/linux/list_private.hhKTubah}(h]h ]h"]h$]h&]hhj~uh1jSjjhjښhhhjhKTubah}(h]j՚ah ](jjeh"]h$]h&]jj)jhuh1jMhjhKThjךhhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhjךhhhjhKTubeh}(h]h ](jmacroeh"]h$]h&]jjjjjjjjjuh1jHhhhjhNhNubj)}(h8``list_private_prev_entry_circular (pos, head, member)``h]j$)}(hjh]h4list_private_prev_entry_circular (pos, head, member)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j#hjubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/core-api/list:784: ./include/linux/list_private.hhKVhjhhubj)}(hget the prev element in list h]j)}(hget the prev element in listh]hget the prev element in list}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/core-api/list:784: ./include/linux/list_private.hhKThj.ubah}(h]h ]h"]h$]h&]uh1jhj@hKThjhhubj)}(hX**Parameters** ``pos`` the type * to cursor. ``head`` the list head to take the element from. ``member`` the name of the list_head within the struct. **Description** Wraparound if pos is the first element (return the last element). Note, that list is expected to be not empty.h](j)}(h**Parameters**h]j)}(hjMh]h Parameters}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjKubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/core-api/list:784: ./include/linux/list_private.hhKXhjGubj&)}(hhh](j+)}(h``pos`` the type * to cursor. h](j1)}(h``pos``h]j$)}(hjlh]hpos}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1j#hjjubah}(h]h ]h"]h$]h&]uh1j0h[/var/lib/git/docbuild/linux/Documentation/core-api/list:784: ./include/linux/list_private.hhKUhjfubjK)}(hhh]j)}(hthe type * to cursor.h]hthe type * to cursor.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKUhjubah}(h]h ]h"]h$]h&]uh1jJhjfubeh}(h]h ]h"]h$]h&]uh1j*hjhKUhjcubj+)}(h1``head`` the list head to take the element from. h](j1)}(h``head``h]j$)}(hjh]hhead}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j#hjubah}(h]h ]h"]h$]h&]uh1j0h[/var/lib/git/docbuild/linux/Documentation/core-api/list:784: ./include/linux/list_private.hhKVhjubjK)}(hhh]j)}(h'the list head to take the element from.h]h'the list head to take the element from.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKVhjubah}(h]h ]h"]h$]h&]uh1jJhjubeh}(h]h ]h"]h$]h&]uh1j*hjhKVhjcubj+)}(h8``member`` the name of the list_head within the struct. h](j1)}(h ``member``h]j$)}(hjޛh]hmember}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j#hjܛubah}(h]h ]h"]h$]h&]uh1j0h[/var/lib/git/docbuild/linux/Documentation/core-api/list:784: ./include/linux/list_private.hhKWhj؛ubjK)}(hhh]j)}(h,the name of the list_head within the struct.h]h,the name of the list_head within the struct.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKWhjubah}(h]h ]h"]h$]h&]uh1jJhj؛ubeh}(h]h ]h"]h$]h&]uh1j*hjhKWhjcubeh}(h]h ]h"]h$]h&]uh1j%hjGubj)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/core-api/list:784: ./include/linux/list_private.hhKYhjGubj)}(hnWraparound if pos is the first element (return the last element). Note, that list is expected to be not empty.h]hnWraparound if pos is the first element (return the last element). Note, that list is expected to be not empty.}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/core-api/list:784: ./include/linux/list_private.hhKXhjGubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj8)}(hhh]h}(h]h ]h"]h$]h&]entries](jD$list_private_entry_is_head (C macro)c.list_private_entry_is_headhNtauh1j7hjhhhNhNubjI)}(hhh](jN)}(hlist_private_entry_is_headh]jT)}(hlist_private_entry_is_headh]jZ)}(hlist_private_entry_is_headh]j`)}(hjXh]hlist_private_entry_is_head}(hjbhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj^ubah}(h]h ](jrjseh"]h$]h&]hhuh1jYhjZhhh[/var/lib/git/docbuild/linux/Documentation/core-api/list:784: ./include/linux/list_private.hhKbubah}(h]h ]h"]h$]h&]hhj~uh1jSjjhjVhhhjuhKbubah}(h]jQah ](jjeh"]h$]h&]jj)jhuh1jMhjuhKbhjShhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhjShhhjuhKbubeh}(h]h ](jmacroeh"]h$]h&]jjjjjjjjjuh1jHhhhjhNhNubj)}(h2``list_private_entry_is_head (pos, head, member)``h]j$)}(hjh]h.list_private_entry_is_head (pos, head, member)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j#hjubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/core-api/list:784: ./include/linux/list_private.hhKdhjhhubj)}(h1test if the entry points to the head of the list h]j)}(h0test if the entry points to the head of the listh]h0test if the entry points to the head of the list}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/core-api/list:784: ./include/linux/list_private.hhKbhjubah}(h]h ]h"]h$]h&]uh1jhjhKbhjhhubj)}(h**Parameters** ``pos`` the type * to cursor ``head`` the head for your list. ``member`` the name of the list_head within the struct.h](j)}(h**Parameters**h]j)}(hjɜh]h Parameters}(hj˜hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjǜubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/core-api/list:784: ./include/linux/list_private.hhKfhjÜubj&)}(hhh](j+)}(h``pos`` the type * to cursor h](j1)}(h``pos``h]j$)}(hjh]hpos}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j#hjubah}(h]h ]h"]h$]h&]uh1j0h[/var/lib/git/docbuild/linux/Documentation/core-api/list:784: ./include/linux/list_private.hhKchjubjK)}(hhh]j)}(hthe type * to cursorh]hthe type * to cursor}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKchjubah}(h]h ]h"]h$]h&]uh1jJhjubeh}(h]h ]h"]h$]h&]uh1j*hjhKchjߜubj+)}(h!``head`` the head for your list. h](j1)}(h``head``h]j$)}(hj!h]hhead}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1j#hjubah}(h]h ]h"]h$]h&]uh1j0h[/var/lib/git/docbuild/linux/Documentation/core-api/list:784: ./include/linux/list_private.hhKdhjubjK)}(hhh]j)}(hthe head for your list.h]hthe head for your list.}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj6hKdhj7ubah}(h]h ]h"]h$]h&]uh1jJhjubeh}(h]h ]h"]h$]h&]uh1j*hj6hKdhjߜubj+)}(h7``member`` the name of the list_head within the struct.h](j1)}(h ``member``h]j$)}(hjZh]hmember}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1j#hjXubah}(h]h ]h"]h$]h&]uh1j0h[/var/lib/git/docbuild/linux/Documentation/core-api/list:784: ./include/linux/list_private.hhKfhjTubjK)}(hhh]j)}(h,the name of the list_head within the struct.h]h,the name of the list_head within the struct.}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/core-api/list:784: ./include/linux/list_private.hhKehjpubah}(h]h ]h"]h$]h&]uh1jJhjTubeh}(h]h ]h"]h$]h&]uh1j*hjohKfhjߜubeh}(h]h ]h"]h$]h&]uh1j%hjÜubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj8)}(hhh]h}(h]h ]h"]h$]h&]entries](jD%list_private_for_each_entry (C macro)c.list_private_for_each_entryhNtauh1j7hjhhhNhNubjI)}(hhh](jN)}(hlist_private_for_each_entryh]jT)}(hlist_private_for_each_entryh]jZ)}(hlist_private_for_each_entryh]j`)}(hjh]hlist_private_for_each_entry}(hjhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjubah}(h]h ](jrjseh"]h$]h&]hhuh1jYhjhhh[/var/lib/git/docbuild/linux/Documentation/core-api/list:784: ./include/linux/list_private.hhKkubah}(h]h ]h"]h$]h&]hhj~uh1jSjjhjhhhj˝hKkubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jMhj˝hKkhjhhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhjhhhj˝hKkubeh}(h]h ](jmacroeh"]h$]h&]jjjjjjjjjuh1jHhhhjhNhNubj)}(h3``list_private_for_each_entry (pos, head, member)``h]j$)}(hjh]h/list_private_for_each_entry (pos, head, member)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j#hjubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/core-api/list:784: ./include/linux/list_private.hhKmhjhhubj)}(h iterate over list of given type h]j)}(hiterate over list of given typeh]hiterate over list of given type}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/core-api/list:784: ./include/linux/list_private.hhKkhjubah}(h]h ]h"]h$]h&]uh1jhjhKkhjhhubj)}(h**Parameters** ``pos`` the type * to use as a loop cursor. ``head`` the head for your list. ``member`` the name of the list_head within the struct.h](j)}(h**Parameters**h]j)}(hjh]h Parameters}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/core-api/list:784: ./include/linux/list_private.hhKohjubj&)}(hhh](j+)}(h,``pos`` the type * to use as a loop cursor. h](j1)}(h``pos``h]j$)}(hj>h]hpos}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1j#hj<ubah}(h]h ]h"]h$]h&]uh1j0h[/var/lib/git/docbuild/linux/Documentation/core-api/list:784: ./include/linux/list_private.hhKlhj8ubjK)}(hhh]j)}(h#the type * to use as a loop cursor.h]h#the type * to use as a loop cursor.}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjShKlhjTubah}(h]h ]h"]h$]h&]uh1jJhj8ubeh}(h]h ]h"]h$]h&]uh1j*hjShKlhj5ubj+)}(h!``head`` the head for your list. h](j1)}(h``head``h]j$)}(hjwh]hhead}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1j#hjuubah}(h]h ]h"]h$]h&]uh1j0h[/var/lib/git/docbuild/linux/Documentation/core-api/list:784: ./include/linux/list_private.hhKmhjqubjK)}(hhh]j)}(hthe head for your list.h]hthe head for your list.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKmhjubah}(h]h ]h"]h$]h&]uh1jJhjqubeh}(h]h ]h"]h$]h&]uh1j*hjhKmhj5ubj+)}(h7``member`` the name of the list_head within the struct.h](j1)}(h ``member``h]j$)}(hjh]hmember}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j#hjubah}(h]h ]h"]h$]h&]uh1j0h[/var/lib/git/docbuild/linux/Documentation/core-api/list:784: ./include/linux/list_private.hhKohjubjK)}(hhh]j)}(h,the name of the list_head within the struct.h]h,the name of the list_head within the struct.}(hjɞhhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/core-api/list:784: ./include/linux/list_private.hhKnhjƞubah}(h]h ]h"]h$]h&]uh1jJhjubeh}(h]h ]h"]h$]h&]uh1j*hjŞhKohj5ubeh}(h]h ]h"]h$]h&]uh1j%hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj8)}(hhh]h}(h]h ]h"]h$]h&]entries](jD-list_private_for_each_entry_reverse (C macro)%c.list_private_for_each_entry_reversehNtauh1j7hjhhhNhNubjI)}(hhh](jN)}(h#list_private_for_each_entry_reverseh]jT)}(h#list_private_for_each_entry_reverseh]jZ)}(h#list_private_for_each_entry_reverseh]j`)}(hjh]h#list_private_for_each_entry_reverse}(hjhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj ubah}(h]h ](jrjseh"]h$]h&]hhuh1jYhjhhh[/var/lib/git/docbuild/linux/Documentation/core-api/list:784: ./include/linux/list_private.hhKvubah}(h]h ]h"]h$]h&]hhj~uh1jSjjhjhhhj!hKvubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jMhj!hKvhjhhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhjhhhj!hKvubeh}(h]h ](jmacroeh"]h$]h&]jjjj:jj:jjjuh1jHhhhjhNhNubj)}(h;``list_private_for_each_entry_reverse (pos, head, member)``h]j$)}(hj@h]h7list_private_for_each_entry_reverse (pos, head, member)}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1j#hj>ubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/core-api/list:784: ./include/linux/list_private.hhKxhjhhubj)}(h+iterate backwards over list of given type. h]j)}(h*iterate backwards over list of given type.h]h*iterate backwards over list of given type.}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/core-api/list:784: ./include/linux/list_private.hhKvhjVubah}(h]h ]h"]h$]h&]uh1jhjhhKvhjhhubj)}(h**Parameters** ``pos`` the type * to use as a loop cursor. ``head`` the head for your list. ``member`` the name of the list_head within the struct.h](j)}(h**Parameters**h]j)}(hjuh]h Parameters}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjsubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/core-api/list:784: ./include/linux/list_private.hhKzhjoubj&)}(hhh](j+)}(h,``pos`` the type * to use as a loop cursor. h](j1)}(h``pos``h]j$)}(hjh]hpos}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j#hjubah}(h]h ]h"]h$]h&]uh1j0h[/var/lib/git/docbuild/linux/Documentation/core-api/list:784: ./include/linux/list_private.hhKwhjubjK)}(hhh]j)}(h#the type * to use as a loop cursor.h]h#the type * to use as a loop cursor.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKwhjubah}(h]h ]h"]h$]h&]uh1jJhjubeh}(h]h ]h"]h$]h&]uh1j*hjhKwhjubj+)}(h!``head`` the head for your list. h](j1)}(h``head``h]j$)}(hj͟h]hhead}(hjϟhhhNhNubah}(h]h ]h"]h$]h&]uh1j#hj˟ubah}(h]h ]h"]h$]h&]uh1j0h[/var/lib/git/docbuild/linux/Documentation/core-api/list:784: ./include/linux/list_private.hhKxhjǟubjK)}(hhh]j)}(hthe head for your list.h]hthe head for your list.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKxhjubah}(h]h ]h"]h$]h&]uh1jJhjǟubeh}(h]h ]h"]h$]h&]uh1j*hjhKxhjubj+)}(h7``member`` the name of the list_head within the struct.h](j1)}(h ``member``h]j$)}(hjh]hmember}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j#hjubah}(h]h ]h"]h$]h&]uh1j0h[/var/lib/git/docbuild/linux/Documentation/core-api/list:784: ./include/linux/list_private.hhKzhjubjK)}(hhh]j)}(h,the name of the list_head within the struct.h]h,the name of the list_head within the struct.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/core-api/list:784: ./include/linux/list_private.hhKyhjubah}(h]h ]h"]h$]h&]uh1jJhjubeh}(h]h ]h"]h$]h&]uh1j*hjhKzhjubeh}(h]h ]h"]h$]h&]uh1j%hjoubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj8)}(hhh]h}(h]h ]h"]h$]h&]entries](jD.list_private_for_each_entry_continue (C macro)&c.list_private_for_each_entry_continuehNtauh1j7hjhhhNhNubjI)}(hhh](jN)}(h$list_private_for_each_entry_continueh]jT)}(h$list_private_for_each_entry_continueh]jZ)}(h$list_private_for_each_entry_continueh]j`)}(hjZh]h$list_private_for_each_entry_continue}(hjdhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj`ubah}(h]h ](jrjseh"]h$]h&]hhuh1jYhj\hhh[/var/lib/git/docbuild/linux/Documentation/core-api/list:784: ./include/linux/list_private.hhKubah}(h]h ]h"]h$]h&]hhj~uh1jSjjhjXhhhjwhKubah}(h]jSah ](jjeh"]h$]h&]jj)jhuh1jMhjwhKhjUhhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhjUhhhjwhKubeh}(h]h ](jmacroeh"]h$]h&]jjjjjjjjjuh1jHhhhjhNhNubj)}(h<``list_private_for_each_entry_continue (pos, head, member)``h]j$)}(hjh]h8list_private_for_each_entry_continue (pos, head, member)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j#hjubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/core-api/list:784: ./include/linux/list_private.hhKhjhhubj)}(h+continue iteration over list of given type h]j)}(h*continue iteration over list of given typeh]h*continue iteration over list of given type}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/core-api/list:784: ./include/linux/list_private.hhKhjubah}(h]h ]h"]h$]h&]uh1jhjhKhjhhubj)}(hX**Parameters** ``pos`` the type * to use as a loop cursor. ``head`` the head for your list. ``member`` the name of the list_head within the struct. **Description** Continue to iterate over list of given type, continuing after the current position.h](j)}(h**Parameters**h]j)}(hjˠh]h Parameters}(hj͠hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjɠubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/core-api/list:784: ./include/linux/list_private.hhKhjŠubj&)}(hhh](j+)}(h,``pos`` the type * to use as a loop cursor. h](j1)}(h``pos``h]j$)}(hjh]hpos}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j#hjubah}(h]h ]h"]h$]h&]uh1j0h[/var/lib/git/docbuild/linux/Documentation/core-api/list:784: ./include/linux/list_private.hhKhjubjK)}(hhh]j)}(h#the type * to use as a loop cursor.h]h#the type * to use as a loop cursor.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jJhjubeh}(h]h ]h"]h$]h&]uh1j*hjhKhjubj+)}(h!``head`` the head for your list. h](j1)}(h``head``h]j$)}(hj#h]hhead}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1j#hj!ubah}(h]h ]h"]h$]h&]uh1j0h[/var/lib/git/docbuild/linux/Documentation/core-api/list:784: ./include/linux/list_private.hhKhjubjK)}(hhh]j)}(hthe head for your list.h]hthe head for your list.}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj8hKhj9ubah}(h]h ]h"]h$]h&]uh1jJhjubeh}(h]h ]h"]h$]h&]uh1j*hj8hKhjubj+)}(h8``member`` the name of the list_head within the struct. h](j1)}(h ``member``h]j$)}(hj\h]hmember}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1j#hjZubah}(h]h ]h"]h$]h&]uh1j0h[/var/lib/git/docbuild/linux/Documentation/core-api/list:784: ./include/linux/list_private.hhKhjVubjK)}(hhh]j)}(h,the name of the list_head within the struct.h]h,the name of the list_head within the struct.}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjqhKhjrubah}(h]h ]h"]h$]h&]uh1jJhjVubeh}(h]h ]h"]h$]h&]uh1j*hjqhKhjubeh}(h]h ]h"]h$]h&]uh1j%hjŠubj)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/core-api/list:784: ./include/linux/list_private.hhKhjŠubj)}(hSContinue to iterate over list of given type, continuing after the current position.h]hSContinue to iterate over list of given type, continuing after the current position.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/core-api/list:784: ./include/linux/list_private.hhKhjŠubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj8)}(hhh]h}(h]h ]h"]h$]h&]entries](jD6list_private_for_each_entry_continue_reverse (C macro).c.list_private_for_each_entry_continue_reversehNtauh1j7hjhhhNhNubjI)}(hhh](jN)}(h,list_private_for_each_entry_continue_reverseh]jT)}(h,list_private_for_each_entry_continue_reverseh]jZ)}(h,list_private_for_each_entry_continue_reverseh]j`)}(hj֡h]h,list_private_for_each_entry_continue_reverse}(hjhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjܡubah}(h]h ](jrjseh"]h$]h&]hhuh1jYhjءhhh[/var/lib/git/docbuild/linux/Documentation/core-api/list:784: ./include/linux/list_private.hhKubah}(h]h ]h"]h$]h&]hhj~uh1jSjjhjԡhhhjhKubah}(h]jϡah ](jjeh"]h$]h&]jj)jhuh1jMhjhKhjѡhhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhjѡhhhjhKubeh}(h]h ](jmacroeh"]h$]h&]jjjj jj jjjuh1jHhhhjhNhNubj)}(hD``list_private_for_each_entry_continue_reverse (pos, head, member)``h]j$)}(hjh]h@list_private_for_each_entry_continue_reverse (pos, head, member)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j#hjubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/core-api/list:784: ./include/linux/list_private.hhKhjhhubj)}(h'iterate backwards from the given point h]j)}(h&iterate backwards from the given pointh]h&iterate backwards from the given point}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/core-api/list:784: ./include/linux/list_private.hhKhj(ubah}(h]h ]h"]h$]h&]uh1jhj:hKhjhhubj)}(hX **Parameters** ``pos`` the type * to use as a loop cursor. ``head`` the head for your list. ``member`` the name of the list_head within the struct. **Description** Start to iterate over list of given type backwards, continuing after the current position.h](j)}(h**Parameters**h]j)}(hjGh]h Parameters}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjEubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/core-api/list:784: ./include/linux/list_private.hhKhjAubj&)}(hhh](j+)}(h,``pos`` the type * to use as a loop cursor. h](j1)}(h``pos``h]j$)}(hjfh]hpos}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1j#hjdubah}(h]h ]h"]h$]h&]uh1j0h[/var/lib/git/docbuild/linux/Documentation/core-api/list:784: ./include/linux/list_private.hhKhj`ubjK)}(hhh]j)}(h#the type * to use as a loop cursor.h]h#the type * to use as a loop cursor.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj{hKhj|ubah}(h]h ]h"]h$]h&]uh1jJhj`ubeh}(h]h ]h"]h$]h&]uh1j*hj{hKhj]ubj+)}(h!``head`` the head for your list. h](j1)}(h``head``h]j$)}(hjh]hhead}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j#hjubah}(h]h ]h"]h$]h&]uh1j0h[/var/lib/git/docbuild/linux/Documentation/core-api/list:784: ./include/linux/list_private.hhKhjubjK)}(hhh]j)}(hthe head for your list.h]hthe head for your list.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jJhjubeh}(h]h ]h"]h$]h&]uh1j*hjhKhj]ubj+)}(h8``member`` the name of the list_head within the struct. h](j1)}(h ``member``h]j$)}(hjآh]hmember}(hjڢhhhNhNubah}(\h]h ]h"]h$]h&]uh1j#hj֢ubah}(h]h ]h"]h$]h&]uh1j0h[/var/lib/git/docbuild/linux/Documentation/core-api/list:784: ./include/linux/list_private.hhKhjҢubjK)}(hhh]j)}(h,the name of the list_head within the struct.h]h,the name of the list_head within the struct.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jJhjҢubeh}(h]h ]h"]h$]h&]uh1j*hjhKhj]ubeh}(h]h ]h"]h$]h&]uh1j%hjAubj)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/core-api/list:784: ./include/linux/list_private.hhKhjAubj)}(hZStart to iterate over list of given type backwards, continuing after the current position.h]hZStart to iterate over list of given type backwards, continuing after the current position.}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/core-api/list:784: ./include/linux/list_private.hhKhjAubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj8)}(hhh]h}(h]h ]h"]h$]h&]entries](jD*list_private_for_each_entry_from (C macro)"c.list_private_for_each_entry_fromhNtauh1j7hjhhhNhNubjI)}(hhh](jN)}(h list_private_for_each_entry_fromh]jT)}(h list_private_for_each_entry_fromh]jZ)}(h list_private_for_each_entry_fromh]j`)}(hjRh]h list_private_for_each_entry_from}(hj\hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjXubah}(h]h ](jrjseh"]h$]h&]hhuh1jYhjThhh[/var/lib/git/docbuild/linux/Documentation/core-api/list:784: ./include/linux/list_private.hhKubah}(h]h ]h"]h$]h&]hhj~uh1jSjjhjPhhhjohKubah}(h]jKah ](jjeh"]h$]h&]jj)jhuh1jMhjohKhjMhhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhjMhhhjohKubeh}(h]h ](jmacroeh"]h$]h&]jjjjjjjjjuh1jHhhhjhNhNubj)}(h8``list_private_for_each_entry_from (pos, head, member)``h]j$)}(hjh]h4list_private_for_each_entry_from (pos, head, member)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j#hjubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/core-api/list:784: ./include/linux/list_private.hhKhjhhubj)}(h7iterate over list of given type from the current point h]j)}(h6iterate over list of given type from the current pointh]h6iterate over list of given type from the current point}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/core-api/list:784: ./include/linux/list_private.hhKhjubah}(h]h ]h"]h$]h&]uh1jhjhKhjhhubj)}(h**Parameters** ``pos`` the type * to use as a loop cursor. ``head`` the head for your list. ``member`` the name of the list_head within the struct. **Description** Iterate over list of given type, continuing from current position.h](j)}(h**Parameters**h]j)}(hjãh]h Parameters}(hjţhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/core-api/list:784: ./include/linux/list_private.hhKhjubj&)}(hhh](j+)}(h,``pos`` the type * to use as a loop cursor. h](j1)}(h``pos``h]j$)}(hjh]hpos}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j#hjubah}(h]h ]h"]h$]h&]uh1j0h[/var/lib/git/docbuild/linux/Documentation/core-api/list:784: ./include/linux/list_private.hhKhjܣubjK)}(hhh]j)}(h#the type * to use as a loop cursor.h]h#the type * to use as a loop cursor.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jJhjܣubeh}(h]h ]h"]h$]h&]uh1j*hjhKhj٣ubj+)}(h!``head`` the head for your list. h](j1)}(h``head``h]j$)}(hjh]hhead}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j#hjubah}(h]h ]h"]h$]h&]uh1j0h[/var/lib/git/docbuild/linux/Documentation/core-api/list:784: ./include/linux/list_private.hhKhjubjK)}(hhh]j)}(hthe head for your list.h]hthe head for your list.}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj0hKhj1ubah}(h]h ]h"]h$]h&]uh1jJhjubeh}(h]h ]h"]h$]h&]uh1j*hj0hKhj٣ubj+)}(h8``member`` the name of the list_head within the struct. h](j1)}(h ``member``h]j$)}(hjTh]hmember}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1j#hjRubah}(h]h ]h"]h$]h&]uh1j0h[/var/lib/git/docbuild/linux/Documentation/core-api/list:784: ./include/linux/list_private.hhKhjNubjK)}(hhh]j)}(h,the name of the list_head within the struct.h]h,the name of the list_head within the struct.}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjihKhjjubah}(h]h ]h"]h$]h&]uh1jJhjNubeh}(h]h ]h"]h$]h&]uh1j*hjihKhj٣ubeh}(h]h ]h"]h$]h&]uh1j%hjubj)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/core-api/list:784: ./include/linux/list_private.hhKhjubj)}(hBIterate over list of given type, continuing from current position.h]hBIterate over list of given type, continuing from current position.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/core-api/list:784: ./include/linux/list_private.hhKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj8)}(hhh]h}(h]h ]h"]h$]h&]entries](jD2list_private_for_each_entry_from_reverse (C macro)*c.list_private_for_each_entry_from_reversehNtauh1j7hjhhhNhNubjI)}(hhh](jN)}(h(list_private_for_each_entry_from_reverseh]jT)}(h(list_private_for_each_entry_from_reverseh]jZ)}(h(list_private_for_each_entry_from_reverseh]j`)}(hjΤh]h(list_private_for_each_entry_from_reverse}(hjؤhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjԤubah}(h]h ](jrjseh"]h$]h&]hhuh1jYhjФhhh[/var/lib/git/docbuild/linux/Documentation/core-api/list:784: ./include/linux/list_private.hhKubah}(h]h ]h"]h$]h&]hhj~uh1jSjjhj̤hhhjhKubah}(h]jǤah ](jjeh"]h$]h&]jj)jhuh1jMhjhKhjɤhhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhjɤhhhjhKubeh}(h]h ](jmacroeh"]h$]h&]jjjjjjjjjuh1jHhhhjhNhNubj)}(h@``list_private_for_each_entry_from_reverse (pos, head, member)``h]j$)}(hj h]hhhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhj>hhhj`hKubeh}(h]h ](jmacroeh"]h$]h&]jjjjyjjyjjjuh1jHhhhjhNhNubj)}(hC``list_private_for_each_entry_safe_reverse (pos, n, head, member)``h]j$)}(hjh]h?list_private_for_each_entry_safe_reverse (pos, n, head, member)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j#hj}ubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/core-api/list:784: ./include/linux/list_private.hhKhjhhubj)}(h1iterate backwards over list safe against removal h]j)}(h0iterate backwards over list safe against removalh]h0iterate backwards over list safe against removal}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/core-api/list:784: ./include/linux/list_private.hhKhjubah}(h]h ]h"]h$]h&]uh1jhjhKhjhhubj)}(hX1**Parameters** ``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_head within the struct. **Description** Iterate backwards over list of given type, safe against removal of list entry.h](j)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/core-api/list:784: ./include/linux/list_private.hhKhjubj&)}(hhh](j+)}(h,``pos`` the type * to use as a loop cursor. h](j1)}(h``pos``h]j$)}(hjӫh]hpos}(hjիhhhNhNubah}(h]h ]h"]h$]h&]uh1j#hjѫubah}(h]h ]h"]h$]h&]uh1j0h[/var/lib/git/docbuild/linux/Documentation/core-api/list:784: ./include/linux/list_private.hhKhjͫubjK)}(hhh]j)}(h#the type * to use as a loop cursor.h]h#the type * to use as a loop cursor.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jJhjͫubeh}(h]h ]h"]h$]h&]uh1j*hjhKhjʫubj+)}(h1``n`` another type * to use as temporary storage h](j1)}(h``n``h]j$)}(hj h]hn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j#hj ubah}(h]h ]h"]h$]h&]uh1j0h[/var/lib/git/docbuild/linux/Documentation/core-api/list:784: ./include/linux/list_private.hhKhjubjK)}(hhh]j)}(h*another type * to use as temporary storageh]h*another type * to use as temporary storage}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj!hKhj"ubah}(h]h ]h"]h$]h&]uh1jJhjubeh}(h]h ]h"]h$]h&]uh1j*hj!hKhjʫubj+)}(h!``head`` the head for your list. h](j1)}(h``head``h]j$)}(hjEh]hhead}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1j#hjCubah}(h]h ]h"]h$]h&]uh1j0h[/var/lib/git/docbuild/linux/Documentation/core-api/list:784: ./include/linux/list_private.hhKhj?ubjK)}(hhh]j)}(hthe head for your list.h]hthe head for your list.}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjZhKhj[ubah}(h]h ]h"]h$]h&]uh1jJhj?ubeh}(h]h ]h"]h$]h&]uh1j*hjZhKhjʫubj+)}(h8``member`` the name of the list_head within the struct. h](j1)}(h ``member``h]j$)}(hj~h]hmember}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j#hj|ubah}(h]h ]h"]h$]h&]uh1j0h[/var/lib/git/docbuild/linux/Documentation/core-api/list:784: ./include/linux/list_private.hhKhjxubjK)}(hhh]j)}(h,the name of the list_head within the struct.h]h,the name of the list_head within the struct.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jJhjxubeh}(h]h ]h"]h$]h&]uh1j*hjhKhjʫubeh}(h]h ]h"]h$]h&]uh1j%hjubj)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/core-api/list:784: ./include/linux/list_private.hhKhjubj)}(hNIterate backwards over list of given type, safe against removal of list entry.h]hNIterate backwards over list of given type, safe against removal of list entry.}(hjϬhhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/core-api/list:784: ./include/linux/list_private.hhKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj8)}(hhh]h}(h]h ]h"]h$]h&]entries](jD&list_private_safe_reset_next (C macro)c.list_private_safe_reset_nexthNtauh1j7hjhhhNhNubjI)}(hhh](jN)}(hlist_private_safe_reset_nexth]jT)}(hlist_private_safe_reset_nexth]jZ)}(hlist_private_safe_reset_nexth]j`)}(hjh]hlist_private_safe_reset_next}(hjhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjubah}(h]h ](jrjseh"]h$]h&]hhuh1jYhjhhh[/var/lib/git/docbuild/linux/Documentation/core-api/list:784: ./include/linux/list_private.hhKubah}(h]h ]h"]h$]h&]hhj~uh1jSjjhjhhhjhKubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jMhjhKhjhhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhjhhhjhKubeh}(h]h ](jmacroeh"]h$]h&]jjjj.jj.jjjuh1jHhhhjhNhNubj)}(h1``list_private_safe_reset_next (pos, n, member)``h]j$)}(hj4h]h-list_private_safe_reset_next (pos, n, member)}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1j#hj2ubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/core-api/list:784: ./include/linux/list_private.hhKhjhhubj)}(h,reset a stale list_for_each_entry_safe loop h]j)}(h+reset a stale list_for_each_entry_safe looph]h+reset a stale list_for_each_entry_safe loop}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/core-api/list:784: ./include/linux/list_private.hhKhjJubah}(h]h ]h"]h$]h&]uh1jhj\hKhjhhubj)}(hX)**Parameters** ``pos`` the loop cursor used in the list_for_each_entry_safe loop ``n`` temporary storage used in list_for_each_entry_safe ``member`` the name of the list_head within the struct. **Description** list_safe_reset_next is not safe to use in general if the list may be modified concurrently (eg. the lock is dropped in the loop body). An exception to this is if the cursor element (pos) is pinned in the list, and list_safe_reset_next is called after re-taking the lock and before completing the current iteration of the loop body.h](j)}(h**Parameters**h]j)}(hjih]h Parameters}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjgubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/core-api/list:784: ./include/linux/list_private.hhKhjcubj&)}(hhh](j+)}(hB``pos`` the loop cursor used in the list_for_each_entry_safe loop h](j1)}(h``pos``h]j$)}(hjh]hpos}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j#hjubah}(h]h ]h"]h$]h&]uh1j0h[/var/lib/git/docbuild/linux/Documentation/core-api/list:784: ./include/linux/list_private.hhKhjubjK)}(hhh]j)}(h9the loop cursor used in the list_for_each_entry_safe looph]h9the loop cursor used in the list_for_each_entry_safe loop}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jJhjubeh}(h]h ]h"]h$]h&]uh1j*hjhKhjubj+)}(h9``n`` temporary storage used in list_for_each_entry_safe h](j1)}(h``n``h]j$)}(hjh]hn}(hjíhhhNhNubah}(h]h ]h"]h$]h&]uh1j#hjubah}(h]h ]h"]h$]h&]uh1j0h[/var/lib/git/docbuild/linux/Documentation/core-api/list:784: ./include/linux/list_private.hhKhjubjK)}(hhh]j)}(h2temporary storage used in list_for_each_entry_safeh]h2temporary storage used in list_for_each_entry_safe}(hjڭhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj֭hKhj׭ubah}(h]h ]h"]h$]h&]uh1jJhjubeh}(h]h ]h"]h$]h&]uh1j*hj֭hKhjubj+)}(h8``member`` the name of the list_head within the struct. h](j1)}(h ``member``h]j$)}(hjh]hmember}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j#hjubah}(h]h ]h"]h$]h&]uh1j0h[/var/lib/git/docbuild/linux/Documentation/core-api/list:784: ./include/linux/list_private.hhKhjubjK)}(hhh]j)}(h,the name of the list_head within the struct.h]h,the name of the list_head within the struct.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jJhjubeh}(h]h ]h"]h$]h&]uh1j*hjhKhjubeh}(h]h ]h"]h$]h&]uh1j%hjcubj)}(h**Description**h]j)}(hj5h]h Description}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3ubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/core-api/list:784: ./include/linux/list_private.hhKhjcubj)}(hXLlist_safe_reset_next is not safe to use in general if the list may be modified concurrently (eg. the lock is dropped in the loop body). An exception to this is if the cursor element (pos) is pinned in the list, and list_safe_reset_next is called after re-taking the lock and before completing the current iteration of the loop body.h]hXLlist_safe_reset_next is not safe to use in general if the list may be modified concurrently (eg. the lock is dropped in the loop body). An exception to this is if the cursor element (pos) is pinned in the list, and list_safe_reset_next is called after re-taking the lock and before completing the current iteration of the loop body.}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/core-api/list:784: ./include/linux/list_private.hhKhjcubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubeh}(h]jah ]h"]private list apiah$]h&]uh1hhhhhhhhM ubeh}(h]jfah ]h"]linked lists in linuxah$]h&]uh1hhhhhhhhKubeh}(h]h ]h"]h$]h&]sourcehuh1hcurrent_sourceN current_lineNsettingsdocutils.frontendValues)}(hN generatorN datestampN source_linkN source_urlN toc_backlinksentryfootnote_backlinksK sectnum_xformKstrip_commentsNstrip_elements_with_classesN strip_classesN report_levelK halt_levelKexit_status_levelKdebugNwarning_streamN tracebackinput_encoding utf-8-siginput_encoding_error_handlerstrictoutput_encodingutf-8output_encoding_error_handlerjerror_encodingutf-8error_encoding_error_handlerbackslashreplace language_codeenrecord_dependenciesNconfigN id_prefixhauto_id_prefixid dump_settingsNdump_internalsNdump_transformsNdump_pseudo_xmlNexpose_internalsNstrict_visitorN_disable_configN_sourcehnj _destinationN _config_files]7/var/lib/git/docbuild/linux/Documentation/docutils.confafile_insertion_enabled raw_enabledKline_length_limitM'pep_referencesN pep_base_urlhttps://peps.python.org/pep_file_url_templatepep-%04drfc_referencesN rfc_base_url&https://datatracker.ietf.org/doc/html/ tab_widthKtrim_footnote_reference_spacesyntax_highlightlong smart_quotessmartquotes_locales]character_level_inline_markupdoctitle_xform docinfo_xformKsectsubtitle_xform image_loadinglinkembed_stylesheetcloak_email_addressessection_self_linkenvNubreporterNindirect_targets]substitution_defs}substitution_names}refnames}refids}nameids}(jljfjjjjj#jjjjjjj jj,jjNjjpj jj jj jjw jj jj j<jj^j j jjjeju nametypes}(jljjj#jjjjjjj j j jw j j jj jjeuh}(jfhjj9jjjj jjYjjj jj,jjNjjpjjjjj jj jj jjz j<j j^j j j jj&jFjOjjjjjj$jIjNjsjxjjjj#jZj_jjj j j!j!j#j#j%j&j)j )jt+jy+j-j-j(0j-0j1j1j.3j33j4j4jL6jQ6j8j8j9j:jP=jU=j@j@jCj Cj EjEjHGjMGjIjIjJjKjyLj~LjMjMjqOjvOjPjPjiRjnRjSjSjUjUjVj$VjWjWjXjXjAZjFZj[j[j]j"]j^j^j'`j,`j}ajajbjbj)dj.djejej!gj&gjhjhjjjjjkjkj$mj)mjnjnjpjpjCrjHrjsjsj[uj`ujvjvjkxjpxjyjzj}{j{j}j}jjjjj=jBjjjjÆjjjjjUjZjrjwjjjAjFjjjjjsjxjɕjΕjj$j<jAjjj՚jښjQjVjjjjjSjXjϡjԡjKjPjǤj̤jCjHjҧjקjjj<jAjjhjXjjvjjjjjjjjj&jjHj?jjjajjjjjjjjjj j6j-jXjOjj}jju footnote_refs} citation_refs} autofootnotes]autofootnote_refs]symbol_footnotes]symbol_footnote_refs] footnotes] citations]autofootnote_startKsymbol_footnote_startK id_counter collectionsCounter}jKsRparse_messages]transform_messages] transformerN include_log] decorationNhhub.