From: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com>
To: Peter Zijlstra <peterz@infradead.org>
Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>,
Ingo Molnar <mingo@redhat.com>,
linux-kernel@vger.kernel.org,
Frederic Weisbecker <fweisbec@gmail.com>,
Mike Galbraith <efault@gmx.de>, Paul Mackerras <paulus@samba.org>,
Stephane Eranian <eranian@google.com>,
Andi Kleen <ak@linux.intel.com>
Subject: Re: [PATCH] [RFC] perf: Fix a race between ring_buffer_detach() and ring_buffer_wakeup()
Date: Fri, 14 Mar 2014 16:02:31 -0700 [thread overview]
Message-ID: <20140314230231.GM21124@linux.vnet.ibm.com> (raw)
In-Reply-To: <20140314224317.GQ30956@twins.programming.kicks-ass.net>
On Fri, Mar 14, 2014 at 11:43:17PM +0100, Peter Zijlstra wrote:
> On Fri, Mar 14, 2014 at 01:47:37PM -0700, Paul E. McKenney wrote:
> > This general idea can be made to work, but it will need some
> > internal-to-RCU help. One vulnerability of the patch below is the
> > following sequence of steps:
> >
> > 1. RCU has just finished a grace period, and is doing the
> > end-of-grace-period accounting.
> >
> > 2. The code below invokes rcu_batches_completed(). Let's assume
> > the result returned is 42.
> >
> > 3. RCU completes the end-of-grace-period accounting, and increments
> > rcu_sched_state.completed.
> >
> > 4. The code below checks ->rcu_batches against the result from
> > another invocation of rcu_batches_completed() and sees that
> > the 43 is not equal to 42, so skips the synchronize_rcu().
> >
> > Except that a grace period has not actually completed. Boom!!!
> >
> > The problem is that rcu_batches_completed() is only intended to give
> > progress information on RCU.
>
> Ah, I thought I was missing something when I was looking through the rcu
> code in a hurry :-)
Well, given that I sometimes miss things when looking through RCU code
carefuly, I guess I cannot give you too much trouble about it.
> I knew there'd be some subtlety between completed and gpnum and such :-)
Some of which I have learned about one RCU bug at a time. ;-)
> > What I can do is give you a pair of functions, one to take a snapshot of
> > the current grace-period state (returning an unsigned long) and another
> > to evaluate a previous snapshot, invoking synchronize_rcu() if there has
> > not been a full grace period in the meantime.
> >
> > The most straightforward approach would invoke acquiring the global
> > rcu_state ->lock on each call, which I am guessing just might be
> > considered to be excessive overhead. ;-) I should be able to decrease
> > the overhead to a memory barrier on each call, and perhaps even down
> > to an smp_load_acquire(). Accessing the RCU state probably costs you
> > a cache miss both times.
> >
> > Thoughts?
>
> Sounds fine, the attach isn't a hotpath, so even the locked version
> should be fine, but I won't keep you from making it all fancy and such
> :-)
Fair enough, let me see what I can come up with.
Thanx, Paul
next prev parent reply other threads:[~2014-03-14 23:02 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-03-07 13:38 [PATCH] [RFC] perf: Fix a race between ring_buffer_detach() and ring_buffer_wakeup() Alexander Shishkin
2014-03-13 19:58 ` Paul E. McKenney
2014-03-14 9:50 ` Peter Zijlstra
2014-03-14 20:47 ` Paul E. McKenney
2014-03-14 22:43 ` Peter Zijlstra
2014-03-14 23:02 ` Paul E. McKenney [this message]
2014-03-15 0:00 ` Paul E. McKenney
2014-03-17 11:18 ` Peter Zijlstra
2014-03-17 16:48 ` Paul E. McKenney
2014-03-17 17:30 ` Peter Zijlstra
2014-03-18 2:45 ` Paul E. McKenney
2014-03-18 8:26 ` Peter Zijlstra
2014-05-07 12:35 ` Peter Zijlstra
2014-05-07 18:06 ` Peter Zijlstra
2014-05-08 15:37 ` Paul E. McKenney
2014-05-08 16:09 ` Peter Zijlstra
2014-05-19 12:48 ` [tip:perf/urgent] perf: Fix a race between ring_buffer_detach() and ring_buffer_attach() tip-bot for Peter Zijlstra
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=20140314230231.GM21124@linux.vnet.ibm.com \
--to=paulmck@linux.vnet.ibm.com \
--cc=ak@linux.intel.com \
--cc=alexander.shishkin@linux.intel.com \
--cc=efault@gmx.de \
--cc=eranian@google.com \
--cc=fweisbec@gmail.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@redhat.com \
--cc=paulus@samba.org \
--cc=peterz@infradead.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 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.