From: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com>
To: Johannes Berg <johannes@sipsolutions.net>
Cc: "John W. Linville" <linville@tuxdriver.com>,
Linux Kernel list <linux-kernel@vger.kernel.org>,
linux-wireless <linux-wireless@vger.kernel.org>
Subject: Re: [PATCH] list.h: add list_for_each_entry_continue_rcu
Date: Mon, 10 Sep 2007 10:39:48 -0700 [thread overview]
Message-ID: <20070910173948.GD11801@linux.vnet.ibm.com> (raw)
In-Reply-To: <1189425947.4506.78.camel@johannes.berg>
On Mon, Sep 10, 2007 at 02:05:47PM +0200, Johannes Berg wrote:
> 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().
>
> Additional help text was provided by Paul McKenney.
Acked-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
> Signed-off-by: Johannes Berg <johannes@sipsolutions.net>
> Cc: linux-kernel@vger.kernel.org
> Cc: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
>
> ---
> John, I don't know if you want to merge this or not. There's no clear
> list.h maintainer and this patch is requisite for the bugfix I'm going
> to send in a minute so it'd probably be best if this goes into the tree
> together.
> If you don't want to take it, however, I have no idea how to handle the
> situation :)
>
> include/linux/list.h | 26 ++++++++++++++++++++++++++
> 1 file changed, 26 insertions(+)
>
> --- wireless-dev.orig/include/linux/list.h 2007-09-07 22:00:41.234425862 +0200
> +++ wireless-dev/include/linux/list.h 2007-09-07 22:05:08.184425862 +0200
> @@ -665,6 +665,32 @@ 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().
> + *
> + * Note that the caller is responsible for making sure that
> + * the element remains in place between the earlier iterator
> + * and this one. One way to do this is to ensure that
> + * both iterators are covered by the same rcu_read_lock(),
> + * while others involve reference counts, flags, or mutexes.
> + */
> +#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
>
>
next prev parent reply other threads:[~2007-09-10 17:39 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-09-10 12:05 [PATCH] list.h: add list_for_each_entry_continue_rcu Johannes Berg
2007-09-10 17:39 ` Paul E. McKenney [this message]
2007-09-14 21:14 ` Johannes Berg
2007-09-14 21:52 ` Paul E. McKenney
-- strict thread matches above, loose matches on Subject: below --
2007-09-07 14:34 Johannes Berg
2007-09-07 15:34 ` Paul E. McKenney
2007-09-07 19:09 ` Johannes Berg
2007-09-07 19:57 ` Paul E. McKenney
2007-09-07 20:04 ` Johannes Berg
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20070910173948.GD11801@linux.vnet.ibm.com \
--to=paulmck@linux.vnet.ibm.com \
--cc=johannes@sipsolutions.net \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-wireless@vger.kernel.org \
--cc=linville@tuxdriver.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.