<p>Harald Welte <strong>merged</strong> this change.</p><p><a href="https://gerrit.osmocom.org/13398">View Change</a></p><div style="white-space:pre-wrap">Approvals:
  Jenkins Builder: Verified
  Pau Espin Pedrol: Looks good to me, approved
  Harald Welte: Looks good to me, approved

</div><pre style="font-family: monospace,monospace; white-space: pre-wrap;">core/linuxlist.h: fix and unify Doxygen documentation<br><br>  - drop incorrect \ref and \a references;<br>  - add missing documentation to LLIST_HEAD_INIT;<br>  - document parameter 'member' of llist_entry();<br>  - turn @argument naming into a valid \param format;<br>  - fix 'type *' vs llist_head loop counter confusion;<br>  - capitalize and dot-terminate all sentences.<br><br>Change-Id: Iac67bdb9d5fbf7c222d04858967337f2428d6a94<br>---<br>M include/osmocom/core/linuxlist.h<br>1 file changed, 96 insertions(+), 99 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/include/osmocom/core/linuxlist.h b/include/osmocom/core/linuxlist.h</span><br><span>index 7791310..d040d90 100644</span><br><span>--- a/include/osmocom/core/linuxlist.h</span><br><span>+++ b/include/osmocom/core/linuxlist.h</span><br><span>@@ -23,11 +23,10 @@</span><br><span> </span><br><span> static inline void prefetch(const void *x) {;}</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-/*! cast a member of a structure out to the containing structure</span><br><span style="color: hsl(0, 100%, 40%);">- *</span><br><span style="color: hsl(0, 100%, 40%);">- * \param[in] ptr the pointer to the member.</span><br><span style="color: hsl(0, 100%, 40%);">- * \param[in] type the type of the container struct this is embedded in.</span><br><span style="color: hsl(0, 100%, 40%);">- * \param[in] member the name of the member within the struct.</span><br><span style="color: hsl(120, 100%, 40%);">+/*! Cast a member of a structure out to the containing structure.</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \param[in] ptr    the pointer to the member.</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \param[in] type   the type of the container struct this is embedded in.</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \param[in] member the name of the member within the struct.</span><br><span>  */</span><br><span> #define container_of(ptr, type, member) ({                 \</span><br><span>         const typeof( ((type *)0)->member ) *__mptr = (ptr);    \</span><br><span>@@ -48,22 +47,26 @@</span><br><span>      struct llist_head *next, *prev;</span><br><span> };</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+/*! Define a new llist_head pointing to a given llist_head.</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \param[in] name another llist_head to be pointed.</span><br><span style="color: hsl(120, 100%, 40%);">+ */</span><br><span> #define LLIST_HEAD_INIT(name) { &(name), &(name) }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-/*! define a statically-initialized \ref llist_head</span><br><span style="color: hsl(0, 100%, 40%);">- *  \param[in] name Variable name</span><br><span style="color: hsl(0, 100%, 40%);">- *</span><br><span style="color: hsl(0, 100%, 40%);">- * This is a helper macro that will define a named variable of type</span><br><span style="color: hsl(0, 100%, 40%);">- * \ref llist_head and initialize it */</span><br><span style="color: hsl(120, 100%, 40%);">+/*! Define a statically-initialized variable of type llist_head.</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \param[in] name variable (symbol) name.</span><br><span style="color: hsl(120, 100%, 40%);">+ */</span><br><span> #define LLIST_HEAD(name) \</span><br><span>       struct llist_head name = LLIST_HEAD_INIT(name)</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-/*! initialize a \ref llist_head to point back to self */</span><br><span style="color: hsl(120, 100%, 40%);">+/*! Initialize a llist_head to point back to itself.</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \param[in] ptr llist_head to be initialized.</span><br><span style="color: hsl(120, 100%, 40%);">+ */</span><br><span> #define INIT_LLIST_HEAD(ptr) do { \</span><br><span>      (ptr)->next = (ptr); (ptr)->prev = (ptr); \</span><br><span> } while (0)</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-/*! Insert a new entry between two known consecutive entries. </span><br><span style="color: hsl(120, 100%, 40%);">+/*</span><br><span style="color: hsl(120, 100%, 40%);">+ * Insert a new entry between two known consecutive entries.</span><br><span>  *</span><br><span>  * This is only for internal llist manipulation where we know</span><br><span>  * the prev/next entries already!</span><br><span>@@ -78,9 +81,9 @@</span><br><span>         prev->next = _new;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-/*! add a new entry into a linked list (at head)</span><br><span style="color: hsl(0, 100%, 40%);">- *  \param _new New entry to be added</span><br><span style="color: hsl(0, 100%, 40%);">- *  \param head \ref llist_head to add it after</span><br><span style="color: hsl(120, 100%, 40%);">+/*! Add a new entry into a linked list (at head).</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \param _new the entry to be added.</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \param head llist_head to prepend the element to.</span><br><span>  *</span><br><span>  * Insert a new entry after the specified head.</span><br><span>  * This is good for implementing stacks.</span><br><span>@@ -90,9 +93,9 @@</span><br><span>        __llist_add(_new, head, head->next);</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-/*! add a new entry into a linked list (at tail)</span><br><span style="color: hsl(0, 100%, 40%);">- *  \param _new  New entry to be added</span><br><span style="color: hsl(0, 100%, 40%);">- *  \param head  Head of linked list to whose tail we shall add \a _new</span><br><span style="color: hsl(120, 100%, 40%);">+/*! Add a new entry into a linked list (at tail).</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \param _new the entry to be added.</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \param head llist_head to append the element to.</span><br><span>  *</span><br><span>  * Insert a new entry before the specified head.</span><br><span>  * This is useful for implementing queues.</span><br><span>@@ -115,8 +118,8 @@</span><br><span>         prev->next = next;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-/*! Delete entry from linked list</span><br><span style="color: hsl(0, 100%, 40%);">- *  \param entry  The element to delete from the llist</span><br><span style="color: hsl(120, 100%, 40%);">+/*! Delete a single entry from a linked list.</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \param entry the element to delete.</span><br><span>  *</span><br><span>  * Note: llist_empty on entry does not return true after this, the entry is</span><br><span>  * in an undefined state.</span><br><span>@@ -128,8 +131,8 @@</span><br><span>        entry->prev = (struct llist_head *)LLIST_POISON2;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-/*! Delete entry from linked list and reinitialize it</span><br><span style="color: hsl(0, 100%, 40%);">- *  \param entry  The element to delete from the list</span><br><span style="color: hsl(120, 100%, 40%);">+/*! Delete a single entry from a linked list and reinitialize it.</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \param entry the element to delete and reinitialize.</span><br><span>  */</span><br><span> static inline void llist_del_init(struct llist_head *entry)</span><br><span> {</span><br><span>@@ -137,9 +140,9 @@</span><br><span>        INIT_LLIST_HEAD(entry); </span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-/*! Delete from one llist and add as another's head</span><br><span style="color: hsl(0, 100%, 40%);">- *  \param llist The entry to move</span><br><span style="color: hsl(0, 100%, 40%);">- *  \param head       The head that will precede our entry</span><br><span style="color: hsl(120, 100%, 40%);">+/*! Delete from one llist and add as another's head.</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \param llist the entry to move.</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \param head  the head that will precede our entry.</span><br><span>  */</span><br><span> static inline void llist_move(struct llist_head *llist, struct llist_head *head)</span><br><span> {</span><br><span>@@ -147,9 +150,9 @@</span><br><span>         llist_add(llist, head);</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-/*! Delete from one llist and add as another's tail</span><br><span style="color: hsl(0, 100%, 40%);">- *  \param llist The entry to move</span><br><span style="color: hsl(0, 100%, 40%);">- *  \param head The head that will follow our entry</span><br><span style="color: hsl(120, 100%, 40%);">+/*! Delete from one llist and add as another's tail.</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \param llist the entry to move.</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \param head  the head that will follow our entry.</span><br><span>  */</span><br><span> static inline void llist_move_tail(struct llist_head *llist,</span><br><span>                                 struct llist_head *head)</span><br><span>@@ -158,9 +161,9 @@</span><br><span>         llist_add_tail(llist, head);</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-/*! Test whether a linked list is empty</span><br><span style="color: hsl(0, 100%, 40%);">- *  \param[in] head  The llist to test.</span><br><span style="color: hsl(0, 100%, 40%);">- *  \returns 1 if the list is empty, 0 otherwise</span><br><span style="color: hsl(120, 100%, 40%);">+/*! Test whether a linked list is empty.</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \param[in] head the llist to test.</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \returns 1 if the list is empty, 0 otherwise.</span><br><span>  */</span><br><span> static inline int llist_empty(const struct llist_head *head)</span><br><span> {</span><br><span>@@ -181,9 +184,9 @@</span><br><span>       at->prev = last;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-/*! Join two llists</span><br><span style="color: hsl(0, 100%, 40%);">- *  \param llist The new linked list to add</span><br><span style="color: hsl(0, 100%, 40%);">- *  \param head The place to add \a llist in the other list</span><br><span style="color: hsl(120, 100%, 40%);">+/*! Join two linked lists.</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \param llist the new linked list to add.</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \param head  the place to add llist within the other list.</span><br><span>  */</span><br><span> static inline void llist_splice(struct llist_head *llist, struct llist_head *head)</span><br><span> {</span><br><span>@@ -191,11 +194,11 @@</span><br><span>            __llist_splice(llist, head);</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-/*! join two llists and reinitialise the emptied llist.</span><br><span style="color: hsl(0, 100%, 40%);">- * \param llist The new linked list to add.</span><br><span style="color: hsl(0, 100%, 40%);">- * \param head  The place to add it in the first llist.</span><br><span style="color: hsl(120, 100%, 40%);">+/*! Join two llists and reinitialise the emptied llist.</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \param llist the new linked list to add.</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \param head  the place to add it within the first llist.</span><br><span>  *</span><br><span style="color: hsl(0, 100%, 40%);">- * The llist at @llist is reinitialised</span><br><span style="color: hsl(120, 100%, 40%);">+ * The llist is reinitialised.</span><br><span>  */</span><br><span> static inline void llist_splice_init(struct llist_head *llist,</span><br><span>                                struct llist_head *head)</span><br><span>@@ -206,15 +209,15 @@</span><br><span>         }</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-/*! Get the struct containing this list entry</span><br><span style="color: hsl(0, 100%, 40%);">- *  \param ptr The \ref llist_head pointer</span><br><span style="color: hsl(0, 100%, 40%);">- *  \param type The type of the struct this is embedded in</span><br><span style="color: hsl(0, 100%, 40%);">- *  \param @member The name of the \ref llist_head within the struct</span><br><span style="color: hsl(120, 100%, 40%);">+/*! Get the struct containing this list entry.</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \param ptr    the llist_head pointer.</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \param type   the type of the struct this is embedded in.</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \param member the name of the llist_head within the struct.</span><br><span>  */</span><br><span> #define llist_entry(ptr, type, member) \</span><br><span>        container_of(ptr, type, member)</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-/*! Get the first element from a list</span><br><span style="color: hsl(120, 100%, 40%);">+/*! Get the first element from a linked list.</span><br><span>  *  \param ptr    the list head to take the element from.</span><br><span>  *  \param type   the type of the struct this is embedded in.</span><br><span>  *  \param member the name of the list_head within the struct.</span><br><span>@@ -224,7 +227,7 @@</span><br><span> #define llist_first_entry(ptr, type, member) \</span><br><span>      llist_entry((ptr)->next, type, member)</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-/*! Get the last element from a list</span><br><span style="color: hsl(120, 100%, 40%);">+/*! Get the last element from a list.</span><br><span>  *  \param ptr    the list head to take the element from.</span><br><span>  *  \param type   the type of the struct this is embedded in.</span><br><span>  *  \param member the name of the llist_head within the struct.</span><br><span>@@ -234,7 +237,7 @@</span><br><span> #define llist_last_entry(ptr, type, member) \</span><br><span>     llist_entry((ptr)->prev, type, member)</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-/*! Get the first element from a list, or NULL</span><br><span style="color: hsl(120, 100%, 40%);">+/*! Get the first element from a list, or NULL.</span><br><span>  *  \param ptr    the list head to take the element from.</span><br><span>  *  \param type   the type of the struct this is embedded in.</span><br><span>  *  \param member the name of the list_head within the struct.</span><br><span>@@ -244,17 +247,17 @@</span><br><span> #define llist_first_entry_or_null(ptr, type, member) \</span><br><span>       (!llist_empty(ptr) ? llist_first_entry(ptr, type, member) : NULL)</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-/*! Iterate over a linked list</span><br><span style="color: hsl(0, 100%, 40%);">- *  \param pos       The \ref llist_head to use as a loop counter</span><br><span style="color: hsl(0, 100%, 40%);">- *  \param head The head of the list over which to iterate</span><br><span style="color: hsl(120, 100%, 40%);">+/*! Iterate over a linked list.</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \param pos  the llist_head to use as a loop counter.</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \param head the head of the list over which to iterate.</span><br><span>  */</span><br><span> #define llist_for_each(pos, head) \</span><br><span>         for (pos = (head)->next, prefetch(pos->next); pos != (head); \</span><br><span>                 pos = pos->next, prefetch(pos->next))</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-/*! Iterate over a llist (no prefetch)</span><br><span style="color: hsl(0, 100%, 40%);">- *  \param pos     The \ref llist_head to use as a loop counter</span><br><span style="color: hsl(0, 100%, 40%);">- *  \param head The head of the list over which to iterate</span><br><span style="color: hsl(120, 100%, 40%);">+/*! Iterate over a linked list (no prefetch).</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \param pos  the llist_head to use as a loop counter.</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \param head the head of the list over which to iterate.</span><br><span>  *</span><br><span>  * This variant differs from llist_for_each() in that it's the</span><br><span>  * simplest possible llist iteration code, no prefetching is done.</span><br><span>@@ -264,27 +267,27 @@</span><br><span> #define __llist_for_each(pos, head) \</span><br><span>      for (pos = (head)->next; pos != (head); pos = pos->next)</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-/*! Iterate over a llist backwards</span><br><span style="color: hsl(0, 100%, 40%);">- *  \param pos      The \ref llist_head to use as a loop counter</span><br><span style="color: hsl(0, 100%, 40%);">- *  \param head The head of the list over which to iterate</span><br><span style="color: hsl(120, 100%, 40%);">+/*! Iterate over a linked list backwards.</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \param pos  the llist_head to use as a loop counter.</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \param head the head of the list over which to iterate.</span><br><span>  */</span><br><span> #define llist_for_each_prev(pos, head) \</span><br><span>  for (pos = (head)->prev, prefetch(pos->prev); pos != (head); \</span><br><span>                 pos = pos->prev, prefetch(pos->prev))</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-/*! Iterate over a list; safe against removal of llist entry</span><br><span style="color: hsl(0, 100%, 40%);">- *  \param pos       The \ref llist_head to use as a loop counter</span><br><span style="color: hsl(0, 100%, 40%);">- *  \param n Another \ref llist_head to use as temporary storage</span><br><span style="color: hsl(0, 100%, 40%);">- *  \param head The head of the list over which to iterate</span><br><span style="color: hsl(120, 100%, 40%);">+/*! Iterate over a linked list, safe against removal of llist entry.</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \param pos  the llist_head to use as a loop counter.</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \param n    another llist_head to use as temporary storage.</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \param head the head of the list over which to iterate.</span><br><span>  */</span><br><span> #define llist_for_each_safe(pos, n, head) \</span><br><span>   for (pos = (head)->next, n = pos->next; pos != (head); \</span><br><span>               pos = n, n = pos->next)</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-/*! Iterate over llist of given type</span><br><span style="color: hsl(0, 100%, 40%);">- *  \param pos The 'type *' to use as a loop counter</span><br><span style="color: hsl(0, 100%, 40%);">- *  \param head The head of the list over which to iterate</span><br><span style="color: hsl(0, 100%, 40%);">- *  \param member The name of the \ref llist_head within struct \a pos</span><br><span style="color: hsl(120, 100%, 40%);">+/*! Iterate over a linked list of a given type.</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \param pos    the 'type *' to use as a loop counter.</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \param head   the head of the list over which to iterate.</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \param member the name of the llist_head within the struct pos.</span><br><span>  */</span><br><span> #define llist_for_each_entry(pos, head, member)                         \</span><br><span>    for (pos = llist_entry((head)->next, typeof(*pos), member),  \</span><br><span>@@ -293,10 +296,10 @@</span><br><span>         pos = llist_entry(pos->member.next, typeof(*pos), member),      \</span><br><span>                 prefetch(pos->member.next))</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-/*! Iterate backwards over llist of given type.</span><br><span style="color: hsl(0, 100%, 40%);">- *  \param pos The 'type *' to use as a loop counter</span><br><span style="color: hsl(0, 100%, 40%);">- *  \param head The head of the list over which to iterate</span><br><span style="color: hsl(0, 100%, 40%);">- *  \param member The name of the \ref llist_head within struct \a pos</span><br><span style="color: hsl(120, 100%, 40%);">+/*! Iterate backwards over a linked list of a given type.</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \param pos    the 'type *' to use as a loop counter.</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \param head   the head of the list over which to iterate.</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \param member the name of the llist_head within the struct pos.</span><br><span>  */</span><br><span> #define llist_for_each_entry_reverse(pos, head, member)                   \</span><br><span>    for (pos = llist_entry((head)->prev, typeof(*pos), member),  \</span><br><span>@@ -305,11 +308,11 @@</span><br><span>         pos = llist_entry(pos->member.prev, typeof(*pos), member),      \</span><br><span>                 prefetch(pos->member.prev))</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-/*! iterate over llist of given type continuing after existing</span><br><span style="color: hsl(0, 100%, 40%);">- * point</span><br><span style="color: hsl(0, 100%, 40%);">- *  \param pos The 'type *' to use as a loop counter</span><br><span style="color: hsl(0, 100%, 40%);">- *  \param head The head of the list over which to iterate</span><br><span style="color: hsl(0, 100%, 40%);">- *  \param member The name of the \ref llist_head within struct \a pos</span><br><span style="color: hsl(120, 100%, 40%);">+/*! Iterate over a linked list of a given type,</span><br><span style="color: hsl(120, 100%, 40%);">+ *  continuing after an existing point.</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \param pos    the 'type *' to use as a loop counter.</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \param head   the head of the list over which to iterate.</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \param member the name of the llist_head within the struct pos.</span><br><span>  */</span><br><span> #define llist_for_each_entry_continue(pos, head, member)            \</span><br><span>    for (pos = llist_entry(pos->member.next, typeof(*pos), member),      \</span><br><span>@@ -318,12 +321,12 @@</span><br><span>         pos = llist_entry(pos->member.next, typeof(*pos), member),      \</span><br><span>                 prefetch(pos->member.next))</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-/*! iterate over llist of given type, safe against removal of</span><br><span style="color: hsl(0, 100%, 40%);">- * non-consecutive(!) llist entries</span><br><span style="color: hsl(0, 100%, 40%);">- *  \param pos The 'type *' to use as a loop counter</span><br><span style="color: hsl(0, 100%, 40%);">- *  \param n Another type * to use as temporary storage</span><br><span style="color: hsl(0, 100%, 40%);">- *  \param head The head of the list over which to iterate</span><br><span style="color: hsl(0, 100%, 40%);">- *  \param member The name of the \ref llist_head within struct \a pos</span><br><span style="color: hsl(120, 100%, 40%);">+/*! Iterate over llist of given type, safe against removal of</span><br><span style="color: hsl(120, 100%, 40%);">+ *  non-consecutive(!) llist entries.</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \param pos    the 'type *' to use as a loop counter.</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \param n      another 'type *' to use as temporary storage.</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \param head   the head of the list over which to iterate.</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \param member the name of the llist_head within the struct pos.</span><br><span>  */</span><br><span> #define llist_for_each_entry_safe(pos, n, head, member)                       \</span><br><span>    for (pos = llist_entry((head)->next, typeof(*pos), member),  \</span><br><span>@@ -331,10 +334,9 @@</span><br><span>          &pos->member != (head);                                     \</span><br><span>         pos = n, n = llist_entry(n->member.next, typeof(*n), member))</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-/**</span><br><span style="color: hsl(0, 100%, 40%);">- * llist_for_each_rcu       -       iterate over an rcu-protected llist</span><br><span style="color: hsl(0, 100%, 40%);">- * @pos:     the &struct llist_head to use as a loop counter.</span><br><span style="color: hsl(0, 100%, 40%);">- * @head:   the head for your llist.</span><br><span style="color: hsl(120, 100%, 40%);">+/*! Iterate over an rcu-protected llist.</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \param pos  the llist_head to use as a loop counter.</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \param head the head of the list over which to iterate.</span><br><span>  */</span><br><span> #define llist_for_each_rcu(pos, head) \</span><br><span>  for (pos = (head)->next, prefetch(pos->next); pos != (head); \</span><br><span>@@ -344,22 +346,19 @@</span><br><span>         for (pos = (head)->next; pos != (head); \</span><br><span>                 pos = pos->next, ({ smp_read_barrier_depends(); 0;}))</span><br><span>             </span><br><span style="color: hsl(0, 100%, 40%);">-/**</span><br><span style="color: hsl(0, 100%, 40%);">- * llist_for_each_safe_rcu   -       iterate over an rcu-protected llist safe</span><br><span style="color: hsl(0, 100%, 40%);">- *                                      against removal of llist entry</span><br><span style="color: hsl(0, 100%, 40%);">- * @pos:  the &struct llist_head to use as a loop counter.</span><br><span style="color: hsl(0, 100%, 40%);">- * @n:              another &struct llist_head to use as temporary storage</span><br><span style="color: hsl(0, 100%, 40%);">- * @head:     the head for your llist.</span><br><span style="color: hsl(120, 100%, 40%);">+/*! Iterate over an rcu-protected llist, safe against removal of llist entry.</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \param pos  the llist_head to use as a loop counter.</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \param n    another llist_head to use as temporary storage.</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \param head the head of the list over which to iterate.</span><br><span>  */</span><br><span> #define llist_for_each_safe_rcu(pos, n, head) \</span><br><span>    for (pos = (head)->next, n = pos->next; pos != (head); \</span><br><span>               pos = n, ({ smp_read_barrier_depends(); 0;}), n = pos->next)</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-/**</span><br><span style="color: hsl(0, 100%, 40%);">- * llist_for_each_entry_rcu       -       iterate over rcu llist of given type</span><br><span style="color: hsl(0, 100%, 40%);">- * @pos:    the type * to use as a loop counter.</span><br><span style="color: hsl(0, 100%, 40%);">- * @head:   the head for your llist.</span><br><span style="color: hsl(0, 100%, 40%);">- * @member:     the name of the llist_struct within the struct.</span><br><span style="color: hsl(120, 100%, 40%);">+/*! Iterate over an rcu-protected llist of a given type.</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \param pos    the 'type *' to use as a loop counter.</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \param head   the head of the list over which to iterate.</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \param member the name of the llist_struct within the struct.</span><br><span>  */</span><br><span> #define llist_for_each_entry_rcu(pos, head, member)                     \</span><br><span>    for (pos = llist_entry((head)->next, typeof(*pos), member),  \</span><br><span>@@ -370,18 +369,16 @@</span><br><span>                 prefetch(pos->member.next))</span><br><span> </span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-/**</span><br><span style="color: hsl(0, 100%, 40%);">- * llist_for_each_continue_rcu    -       iterate over an rcu-protected llist </span><br><span style="color: hsl(0, 100%, 40%);">- *                  continuing after existing point.</span><br><span style="color: hsl(0, 100%, 40%);">- * @pos:        the &struct llist_head to use as a loop counter.</span><br><span style="color: hsl(0, 100%, 40%);">- * @head:   the head for your llist.</span><br><span style="color: hsl(120, 100%, 40%);">+/*! Iterate over an rcu-protected llist, continuing after existing point.</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \param pos  the llist_head to use as a loop counter.</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \param head the head of the list over which to iterate.</span><br><span>  */</span><br><span> #define llist_for_each_continue_rcu(pos, head) \</span><br><span>        for ((pos) = (pos)->next, prefetch((pos)->next); (pos) != (head); \</span><br><span>            (pos) = (pos)->next, ({ smp_read_barrier_depends(); 0;}), prefetch((pos)->next))</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-/*! count nr of llist items by iterating.</span><br><span style="color: hsl(0, 100%, 40%);">- *  \param head The llist head to count items of.</span><br><span style="color: hsl(120, 100%, 40%);">+/*! Count number of llist items by iterating.</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \param head the llist head to count items of.</span><br><span>  *  \returns Number of items.</span><br><span>  *</span><br><span>  * This function is not efficient, mostly useful for small lists and non time</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/13398">change 13398</a>. To unsubscribe, or for help writing mail filters, visit <a href="https://gerrit.osmocom.org/settings">settings</a>.</p><div itemscope itemtype="http://schema.org/EmailMessage"><div itemscope itemprop="action" itemtype="http://schema.org/ViewAction"><link itemprop="url" href="https://gerrit.osmocom.org/13398"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: libosmocore </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-MessageType: merged </div>
<div style="display:none"> Gerrit-Change-Id: Iac67bdb9d5fbf7c222d04858967337f2428d6a94 </div>
<div style="display:none"> Gerrit-Change-Number: 13398 </div>
<div style="display:none"> Gerrit-PatchSet: 3 </div>
<div style="display:none"> Gerrit-Owner: Vadim Yanitskiy <axilirator@gmail.com> </div>
<div style="display:none"> Gerrit-Reviewer: Harald Welte <laforge@gnumonks.org> </div>
<div style="display:none"> Gerrit-Reviewer: Jenkins Builder (1000002) </div>
<div style="display:none"> Gerrit-Reviewer: Pau Espin Pedrol <pespin@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: Vadim Yanitskiy <axilirator@gmail.com> </div>