From: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com>
To: Steven Rostedt <rostedt@goodmis.org>
Cc: linux-kernel@vger.kernel.org, Ingo Molnar <mingo@kernel.org>,
Andrew Morton <akpm@linux-foundation.org>
Subject: Re: [PATCH 6/5]rcu/tracing: Add rcu_disabled to denote when rcu_irq_enter() will not work
Date: Fri, 7 Apr 2017 09:53:29 -0700 [thread overview]
Message-ID: <20170407165329.GZ1600@linux.vnet.ibm.com> (raw)
In-Reply-To: <20170407124440.7697e14f@gandalf.local.home>
On Fri, Apr 07, 2017 at 12:44:40PM -0400, Steven Rostedt wrote:
> On Fri, 7 Apr 2017 09:42:20 -0700
> "Paul E. McKenney" <paulmck@linux.vnet.ibm.com> wrote:
>
> > On Fri, Apr 07, 2017 at 12:35:16PM -0400, Steven Rostedt wrote:
> > > From: "Steven Rostedt (VMware)" <rostedt@goodmis.org>
> > >
> > > Tracing uses rcu_irq_enter() as a way to make sure that RCU is watching when
> > > it needs to use rcu_read_lock() and friends. This is because tracing can
> > > happen as RCU is about to enter user space, or about to go idle, and RCU
> > > does not watch for RCU read side critical sections as it makes the
> > > transition.
> > >
> > > There is a small location within the RCU infrastructure that rcu_irq_enter()
> > > itself will not work. If tracing were to occur in that section it will break
> > > if it tries to use rcu_irq_enter().
> > >
> > > Originally, this happens with the stack_tracer, because it will call
> > > save_stack_trace when it encounters stack usage that is greater than any
> > > stack usage it had encountered previously. There was a case where that
> > > happened in the RCU section where rcu_irq_enter() did not work, and lockdep
> > > complained loudly about it. To fix it, stack tracing added a call to be
> > > disabled and RCU would disable stack tracing during the critical section
> > > that rcu_irq_enter() was inoperable. This solution worked, but there are
> > > other cases that use rcu_irq_enter() and it would be a good idea to let RCU
> > > give a way to let others know that rcu_irq_enter() will not work. For
> > > example, in trace events.
> > >
> > > Another helpful aspect of this change is that it also moves the per cpu
> > > variable called in the RCU critical section into a cache locale along with
> > > other RCU per cpu variables used in that same location.
> > >
> > > I'm keeping the stack_trace_disable() code, as that still could be used in
> > > the future by places that really need to disable it. And since it's only a
> > > static inline, it wont take up any kernel text if it is not used.
> > >
> > > Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org>
> >
> > Looks better, especially __this_cpu_inc() and __this_cpu_dec().
> >
> > How about rcu_irq_enter_disabled instead of rcu_disabled? We aren't
> > really disabling all of RCU. ;-)
>
> OK, I'll make the update and send a 6.1 (and also a new 7/5)!
So the ex-Borg member was really 9 of 7 rather than 7 of 9, then? ;-)
Thanx, Paul
next prev parent reply other threads:[~2017-04-07 16:53 UTC|newest]
Thread overview: 39+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-04-07 14:01 [PATCH 0/5 v2] tracing: Add usecase of synchronize_rcu_tasks() and stack_tracer_disable() Steven Rostedt
2017-04-07 14:01 ` [PATCH 1/5 v2] ftrace: Add use of synchronize_rcu_tasks() with dynamic trampolines Steven Rostedt
2017-04-07 14:01 ` [PATCH 2/5 v2] tracing: Replace the per_cpu() with this_cpu() in trace_stack.c Steven Rostedt
2017-04-07 14:36 ` Paul E. McKenney
2017-04-07 14:48 ` Steven Rostedt
2017-04-07 15:08 ` Paul E. McKenney
2017-04-07 14:01 ` [PATCH 3/5 v2] tracing: Add stack_tracer_disable/enable() functions Steven Rostedt
2017-04-07 14:22 ` Steven Rostedt
2017-04-07 14:25 ` [PATCH 3/5 v2.1] " Steven Rostedt
2017-04-07 14:01 ` [PATCH 4/5 v2] tracing: Rename trace_active to disable_stack_tracer and inline its modification Steven Rostedt
2017-04-07 14:01 ` [PATCH 5/5 v2] rcu: Fix dyntick-idle tracing Steven Rostedt
2017-04-07 14:40 ` Paul E. McKenney
2017-04-07 14:53 ` Steven Rostedt
2017-04-07 15:09 ` Paul E. McKenney
2017-04-07 15:29 ` Steven Rostedt
2017-04-07 14:43 ` [PATCH 0/5 v2] tracing: Add usecase of synchronize_rcu_tasks() and stack_tracer_disable() Paul E. McKenney
2017-04-07 14:58 ` Steven Rostedt
2017-04-07 15:11 ` Paul E. McKenney
2017-04-07 15:28 ` Steven Rostedt
2017-04-07 16:35 ` [PATCH 6/5]rcu/tracing: Add rcu_disabled to denote when rcu_irq_enter() will not work Steven Rostedt
2017-04-07 16:42 ` Paul E. McKenney
2017-04-07 16:44 ` Steven Rostedt
2017-04-07 16:53 ` Paul E. McKenney [this message]
2017-04-07 17:03 ` [PATCH 6/5 v2] rcu/tracing: " Steven Rostedt
2017-04-07 17:15 ` Paul E. McKenney
2017-04-07 17:06 ` [PATCH 7/5] tracing: Make sure rcu_irq_enter() can work for trace_*_rcuidle() trace events Steven Rostedt
2017-04-07 17:15 ` Paul E. McKenney
2017-04-07 17:19 ` Mathieu Desnoyers
2017-04-07 17:26 ` Steven Rostedt
2017-04-07 17:32 ` Steven Rostedt
2017-04-07 17:49 ` Mathieu Desnoyers
2017-04-07 17:55 ` Steven Rostedt
2017-04-07 18:10 ` [PATCH 7/5 v3] " Steven Rostedt
2017-04-07 18:17 ` Mathieu Desnoyers
2017-04-07 19:41 ` [PATCH 7/5 v4] " Steven Rostedt
2017-04-07 19:43 ` Steven Rostedt
2017-04-10 17:11 ` Mathieu Desnoyers
2017-04-07 17:28 ` [PATCH 7/5] " Steven Rostedt
2017-04-07 17:48 ` [PATCH 7/5 v2] " Steven Rostedt
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=20170407165329.GZ1600@linux.vnet.ibm.com \
--to=paulmck@linux.vnet.ibm.com \
--cc=akpm@linux-foundation.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@kernel.org \
--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 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.