From: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com>
To: Steven Rostedt <rostedt@goodmis.org>
Cc: linux-kernel@vger.kernel.org,
Thomas Gleixner <tglx@linutronix.de>,
Peter Zijlstra <peterz@infradead.org>,
Ingo Molnar <mingo@kernel.org>,
Mathieu Desnoyers <mathieu.desnoyers@efficios.com>,
Masami Hiramatsu <mhiramat@kernel.org>
Subject: Re: [RFC][PATCH 0/5] perf/tracing/cpuhotplug: Fix locking order
Date: Fri, 12 May 2017 11:13:57 -0700 [thread overview]
Message-ID: <20170512181357.GW3956@linux.vnet.ibm.com> (raw)
In-Reply-To: <20170512171544.100715273@goodmis.org>
On Fri, May 12, 2017 at 01:15:44PM -0400, Steven Rostedt wrote:
> NOTE: This was quickly written. The change logs and patches probably need
> some loving. This is for discussion. These may become legitimate patches,
> but for now, I'm seeing if this is an acceptable solution.
>
> Also note, I checked out the last branch that I had Linus pull, and then
> merged with tip's commit b53e5129~1, which is the commit just before
> "trace/perf: Cure hotplug lock ordering issues" in tip/smp/hotplug
> that placed get_online_cpus() ahead of event_mutex. The issue is that
> event_mutex is a high level mutex, and trying to make sure that
> get_online_cpus() is held whenever it is held and is going to be a
> nightmare. So I started ahead of that commit, but I needed changes
> in my own repo to do full testing. I renamed this temp branch to
> "tip/cpuhotplug", and you can pull it as well. But this is not going
> to be a candidate for pushing to Linus.
>
> The 5 patches here are:
>
> 1) fix a lockdep splat when taking stack trace in irqsoff tracing
> (one of my tests triggered this)
>
> 2) Allow for get_online_cpus() to nest
>
> 3) Have kprobes take get_online_cpus() before taking jump label lock.
>
> 4) Have tracepoints always take get_online_cpus
>
> 5) Have perf take event_mutex before taking get_online_cpus()
>
> Thoughts?
First a thought on the use of get_online_cpus()...
Your mileage may vary, but from what I have seen, life is very good
if your piece of the kernel uses get_online_cpus(), but refrains from
using the CPU-hotplug notifiers. Life is also very good if your piece
of the kernel uses CPU-hotplug notifiers, but refrains from using
get_online_cpus(). If your code uses both get_online_cpus() -and-
CPU-hotplug notifiers for the same data structures, life can be quite
complex and difficult.
For RCU, I cannot avoid using notifiers, so I have been removing uses
of get_online_cpus(). Removing each of these has made large numbers of
race conditions with CPU hotplug simply disappear -- not much reduction
in lines of code, but big reductions in complexity and in state space.
I have one more to go in _rcu_barrier().
Again, your mileage may vary.
Thanx, Paul
> -- Steve
>
>
> git://git.kernel.org/pub/scm/linux/kernel/git/rostedt/linux-trace.git
> tip/cpuhotplug
>
> Head SHA1: ddb06e08fa10ed5030285267a9b1e25d40c337c8
>
>
> Steven Rostedt (VMware) (5):
> tracing: Make sure RCU is watching before calling a stack trace
> cpu-hotplug: Allow get_online_cpus() to nest
> kprobes: Take get_online_cpus() before taking jump_label_lock()
> tracepoints: Grab get_online_cpus() before taking tracepoints_mutex
> perf: Grab event_mutex before taking get_online_cpus()
>
> ----
> include/linux/sched.h | 1 +
> include/linux/trace_events.h | 2 ++
> kernel/cpu.c | 9 +++++++++
> kernel/events/core.c | 9 +++++++++
> kernel/fork.c | 1 +
> kernel/kprobes.c | 6 +++---
> kernel/trace/trace.c | 5 +++++
> kernel/trace/trace.h | 1 -
> kernel/trace/trace_event_perf.c | 8 ++++----
> kernel/tracepoint.c | 5 +++++
> 10 files changed, 39 insertions(+), 8 deletions(-)
>
next prev parent reply other threads:[~2017-05-12 18:14 UTC|newest]
Thread overview: 34+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-05-12 17:15 [RFC][PATCH 0/5] perf/tracing/cpuhotplug: Fix locking order Steven Rostedt
2017-05-12 17:15 ` [RFC][PATCH 1/5] tracing: Make sure RCU is watching before calling a stack trace Steven Rostedt
2017-05-12 18:25 ` Paul E. McKenney
2017-05-12 18:36 ` Steven Rostedt
2017-05-12 18:50 ` Paul E. McKenney
2017-05-12 20:05 ` Steven Rostedt
2017-05-12 20:31 ` Paul E. McKenney
2017-05-17 16:46 ` Steven Rostedt
2017-05-12 17:15 ` [RFC][PATCH 2/5] cpu-hotplug: Allow get_online_cpus() to nest Steven Rostedt
2017-05-12 18:35 ` Paul E. McKenney
2017-05-12 18:40 ` Steven Rostedt
2017-05-12 18:52 ` Paul E. McKenney
2017-05-12 22:15 ` Thomas Gleixner
2017-05-13 0:23 ` Steven Rostedt
2017-05-12 17:15 ` [RFC][PATCH 3/5] kprobes: Take get_online_cpus() before taking jump_label_lock() Steven Rostedt
2017-05-12 18:39 ` Paul E. McKenney
2017-05-12 18:44 ` Steven Rostedt
2017-05-17 17:50 ` Masami Hiramatsu
2017-05-12 17:15 ` [RFC][PATCH 4/5] tracepoints: Grab get_online_cpus() before taking tracepoints_mutex Steven Rostedt
2017-05-12 17:15 ` [RFC][PATCH 5/5] perf: Grab event_mutex before taking get_online_cpus() Steven Rostedt
2017-05-12 18:13 ` Paul E. McKenney [this message]
2017-05-12 19:49 ` [RFC][PATCH 0/5] perf/tracing/cpuhotplug: Fix locking order Peter Zijlstra
2017-05-12 20:14 ` Steven Rostedt
2017-05-12 21:34 ` Steven Rostedt
2017-05-13 13:40 ` Paul E. McKenney
2017-05-15 9:03 ` Peter Zijlstra
2017-05-15 18:40 ` Paul E. McKenney
2017-05-16 8:19 ` Peter Zijlstra
2017-05-16 12:46 ` Paul E. McKenney
2017-05-16 14:27 ` Paul E. McKenney
2017-05-17 10:40 ` Peter Zijlstra
2017-05-17 14:55 ` Paul E. McKenney
2017-05-18 3:58 ` Paul E. McKenney
2017-05-15 19:06 ` 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=20170512181357.GW3956@linux.vnet.ibm.com \
--to=paulmck@linux.vnet.ibm.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mathieu.desnoyers@efficios.com \
--cc=mhiramat@kernel.org \
--cc=mingo@kernel.org \
--cc=peterz@infradead.org \
--cc=rostedt@goodmis.org \
--cc=tglx@linutronix.de \
/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;
as well as URLs for NNTP newsgroup(s).