From: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com>
To: Jeff Haran <Jeff.Haran@citrix.com>
Cc: Milos Vyletel <milos@redhat.com>,
Josh Triplett <josh@joshtriplett.org>,
Steven Rostedt <rostedt@goodmis.org>,
Mathieu Desnoyers <mathieu.desnoyers@efficios.com>,
Lai Jiangshan <laijs@cn.fujitsu.com>,
Jonathan Corbet <corbet@lwn.net>,
"open list:READ-COPY UPDATE..." <linux-kernel@vger.kernel.org>,
"open list:DOCUMENTATION" <linux-doc@vger.kernel.org>
Subject: Re: [PATCH] rcu: small rcu_dereference doc update
Date: Fri, 17 Apr 2015 11:40:31 -0700 [thread overview]
Message-ID: <20150417184031.GV23685@linux.vnet.ibm.com> (raw)
In-Reply-To: <4E5779AD88B2F040B8A7E83ECF544D1A5CC0E4@SJCPEX01CL03.citrite.net>
On Fri, Apr 17, 2015 at 04:53:15PM +0000, Jeff Haran wrote:
> > -----Original Message-----
> > From: Paul E. McKenney [mailto:paulmck@linux.vnet.ibm.com]
> > Sent: Friday, April 17, 2015 7:07 AM
> > To: Milos Vyletel
> > Cc: Josh Triplett; Steven Rostedt; Mathieu Desnoyers; Lai Jiangshan;
> > Jonathan Corbet; open list:READ-COPY UPDATE...; open
> > list:DOCUMENTATION; Jeff Haran
> > Subject: Re: [PATCH] rcu: small rcu_dereference doc update
> >
> > On Fri, Apr 17, 2015 at 12:33:36PM +0200, Milos Vyletel wrote:
> > > Make a note stating that repeated calls of rcu_dereference() may not
> > > return the same pointer if update happens while in critical section.
> > >
> > > Reported-by: Jeff Haran <jeff.haran@citrix.com>
> > > Signed-off-by: Milos Vyletel <milos@redhat.com>
> >
> > Hmmm... Seems like that should be obvious, but on the other hand, I have
> > been using RCU for more than twenty years, so my obviousness sensors
> > might need recalibration.
> >
> > Queued for 4.2.
> >
> > Thanx, Paul
>
> It's just that the original text suggests repeated rcu_dereference() calls are discouraged because they are ugly and not efficient on some architectures. When I read that I concluded that those were the only reasons not to do it, that despite the possible inefficiency it would always return the same pointer. Depending on how one's code is structured, being able to do this could be advantageous. Then I started looking at the code that implements it and I couldn't see how it could possibly be the case. I even wrote a little kernel module to prove to myself that doing this could return different pointer values. If I misinterpreted the original text I figured others might also. Milos even found some code in the kernel where it's author had done this, so it might be a widely held misunderstanding. It's easy for people who have worked with rwlock_ts to think an RCU read lock works the same.
Fair point, and thank you the rationale! Are there any other parts of
the RCU documentation that are similarly blind to your initial point of
view? If so, it would be good for them to be fixed.
Thanx, Paul
> Thanks,
>
> Jeff Haran
>
> > > ---
> > > Documentation/RCU/whatisRCU.txt | 4 +++-
> > > 1 file changed, 3 insertions(+), 1 deletion(-)
> > >
> > > diff --git a/Documentation/RCU/whatisRCU.txt
> > > b/Documentation/RCU/whatisRCU.txt index 88dfce1..82b1b2c 100644
> > > --- a/Documentation/RCU/whatisRCU.txt
> > > +++ b/Documentation/RCU/whatisRCU.txt
> > > @@ -256,7 +256,9 @@ rcu_dereference()
> > > If you are going to be fetching multiple fields from the
> > > RCU-protected structure, using the local variable is of
> > > course preferred. Repeated rcu_dereference() calls look
> > > - ugly and incur unnecessary overhead on Alpha CPUs.
> > > + ugly, do not guarantee that same pointer will be returned
> > > + if update happened while in critical section and incur
> > > + unnecessary overhead on Alpha CPUs.
> > >
> > > Note that the value returned by rcu_dereference() is valid
> > > only within the enclosing RCU read-side critical section.
> > > --
> > > 2.1.0
> > >
>
next prev parent reply other threads:[~2015-04-17 18:40 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-04-17 10:33 [PATCH] rcu: small rcu_dereference doc update Milos Vyletel
2015-04-17 14:06 ` Paul E. McKenney
2015-04-17 14:13 ` Steven Rostedt
2015-04-17 14:24 ` Paul E. McKenney
2015-04-17 14:37 ` Milos Vyletel
2015-04-17 16:53 ` Jeff Haran
2015-04-17 18:40 ` Paul E. McKenney [this message]
2015-04-17 23:48 ` Jeff Haran
2015-04-21 15:53 ` Paul E. McKenney
2015-04-17 15:55 ` Pranith Kumar
2015-04-17 16:15 ` Paul E. McKenney
2015-04-17 17:13 ` Pranith Kumar
2015-04-17 21:27 ` Paul E. McKenney
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=20150417184031.GV23685@linux.vnet.ibm.com \
--to=paulmck@linux.vnet.ibm.com \
--cc=Jeff.Haran@citrix.com \
--cc=corbet@lwn.net \
--cc=josh@joshtriplett.org \
--cc=laijs@cn.fujitsu.com \
--cc=linux-doc@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mathieu.desnoyers@efficios.com \
--cc=milos@redhat.com \
--cc=rostedt@goodmis.org \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox