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 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.