mirror of https://gitee.com/openkylin/linux.git
rculist: Improve documentation for list_for_each_entry_from_rcu()
Unfortunately the patch for adding list_for_each_entry_from_rcu() wasn't the final patch after all review. It is functionally correct but the documentation was incomplete. This patch adds this missing documentation which includes an update to the documentation for list_for_each_entry_continue_rcu() to match the documentation for the new list_for_each_entry_from_rcu(), and adds list_for_each_entry_from_rcu() and the already existing hlist_for_each_entry_from_rcu() to section 7 of whatisRCU.txt. Reviewed-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com> Signed-off-by: NeilBrown <neilb@suse.com> Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
This commit is contained in:
parent
52e17ba1d0
commit
b7b6f94cf6
|
@ -820,11 +820,13 @@ RCU list traversal:
|
|||
list_next_rcu
|
||||
list_for_each_entry_rcu
|
||||
list_for_each_entry_continue_rcu
|
||||
list_for_each_entry_from_rcu
|
||||
hlist_first_rcu
|
||||
hlist_next_rcu
|
||||
hlist_pprev_rcu
|
||||
hlist_for_each_entry_rcu
|
||||
hlist_for_each_entry_rcu_bh
|
||||
hlist_for_each_entry_from_rcu
|
||||
hlist_for_each_entry_continue_rcu
|
||||
hlist_for_each_entry_continue_rcu_bh
|
||||
hlist_nulls_first_rcu
|
||||
|
|
|
@ -396,7 +396,16 @@ static inline void list_splice_tail_init_rcu(struct list_head *list,
|
|||
* @member: the name of the list_head within the struct.
|
||||
*
|
||||
* Continue to iterate over list of given type, continuing after
|
||||
* the current position.
|
||||
* the current position which must have been in the list when the RCU read
|
||||
* lock was taken.
|
||||
* This would typically require either that you obtained the node from a
|
||||
* previous walk of the list in the same RCU read-side critical section, or
|
||||
* that you held some sort of non-RCU reference (such as a reference count)
|
||||
* to keep the node alive *and* in the list.
|
||||
*
|
||||
* This iterator is similar to list_for_each_entry_from_rcu() except
|
||||
* this starts after the given position and that one starts at the given
|
||||
* position.
|
||||
*/
|
||||
#define list_for_each_entry_continue_rcu(pos, head, member) \
|
||||
for (pos = list_entry_rcu(pos->member.next, typeof(*pos), member); \
|
||||
|
@ -411,6 +420,14 @@ static inline void list_splice_tail_init_rcu(struct list_head *list,
|
|||
*
|
||||
* Iterate over the tail of a list starting from a given position,
|
||||
* which must have been in the list when the RCU read lock was taken.
|
||||
* This would typically require either that you obtained the node from a
|
||||
* previous walk of the list in the same RCU read-side critical section, or
|
||||
* that you held some sort of non-RCU reference (such as a reference count)
|
||||
* to keep the node alive *and* in the list.
|
||||
*
|
||||
* This iterator is similar to list_for_each_entry_continue_rcu() except
|
||||
* this starts from the given position and that one starts from the position
|
||||
* after the given position.
|
||||
*/
|
||||
#define list_for_each_entry_from_rcu(pos, head, member) \
|
||||
for (; &(pos)->member != (head); \
|
||||
|
|
Loading…
Reference in New Issue