To implement the multicast list callback in mac80211 we need to do partial list iteration. Since I want to convert the interface list to an RCU list, I need a new list walking primitive: list_for_each_entry_continue_rcu(). Signed-off-by: Johannes Berg <johannes@sipsolutions.net> Cc: linux-kernel@vger.kernel.org Cc: Paul E. McKenney <paulmck@linux.vnet.ibm.com> Cc: Herbert Xu <herbert@gondor.apana.org.au> Cc: Randy Dunlap <randy.dunlap@oracle.com> Cc: Pavel Emelianov <xemul@openvz.org> Cc: Zach Brown <zach.brown@oracle.com> Cc: Dave Jones <davej@redhat.com> Cc: Oleg Nesterov <oleg@tv-sign.ru> --- How do we want to handle this? Is it ok to push this via net-2.6.24 so we can merge it along with the fix that needs it? include/linux/list.h | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) --- wireless-dev.orig/include/linux/list.h 2007-09-07 00:16:07.374444290 +0200 +++ wireless-dev/include/linux/list.h 2007-08-29 21:08:14.802054000 +0200 @@ -665,6 +665,26 @@ static inline void list_splice_init_rcu( prefetch(rcu_dereference((pos))->next), (pos) != (head); \ (pos) = (pos)->next) + +/** + * list_for_each_entry_continue_rcu - continue iteration over rcu list + * @pos: the type * to use as a loop cursor. + * @head: the head for your list. + * @member: the name of the list_struct within the struct. + * + * Continue to iterate over rcu list of given type, continuing after + * the current position. + * + * This list-traversal primitive may safely run concurrently with + * the _rcu list-mutation primitives such as list_add_rcu() + * as long as the traversal is guarded by rcu_read_lock(). + */ +#define list_for_each_entry_continue_rcu(pos, head, member) \ + for ((pos) = list_entry((pos)->member.next, typeof(*pos), member); \ + prefetch(rcu_dereference((pos))->member.next), \ + &pos->member != (head); \ + (pos) = list_entry(pos->member.next, typeof(*pos), member)) + /* * Double linked lists with a single pointer list head. * Mostly useful for hash tables where the two pointer list head is -
| Peter Zijlstra | [RFC][PATCH 7/7] lockdep: spin_lock_nest_lock() |
| Gabriel C | Re: 2.6.24-rc2-mm1 |
| Andrew Morton | Re: [PATCH 2.6.21] cramfs: add cramfs Linear XIP |
| Jiri Kosina | Re: 2.6.21-rc5-mm4 |
git: | |
| Gregory Haskins | [RFC PATCH 00/17] virtual-bus |
| Jarek Poplawski | Re: [PATCH] pkt_sched: Destroy gen estimators under rtnl_lock(). |
| David Miller | [GIT]: Networking |
| Gerrit Renker | [PATCH 0/37] dccp: Feature negotiation - last call for comments |
