Commit a9f70bd4 authored by Linus Torvalds's avatar Linus Torvalds

Merge tag 'trace-fixes-v4.5-rc4' of...

Merge tag 'trace-fixes-v4.5-rc4' of git://git.kernel.org/pub/scm/linux/kernel/git/rostedt/linux-trace

Pull tracing fixes from Steven Rostedt:
 "This includes two fixes.

  The first is something that has come up a few times and has been
  worked out individually, but it's come up now enough that the problem
  should be generic.  Tracepoints are protected by RCU sched.  There are
  several tracepoints within core infrastructure like kfree().  If a
  tracepoint is called when the CPU is going down, or when it's coming
  up but has yet to be recognized by RCU, a RCU warning is triggered.

  This is a true bug as that tracepoint is not protected by RCU.
  Usually, this is taken care of by testing for cpu online as a
  tracepoint condition.  But as this is happening more often, moving it
  from a individual tracepoint to a check in the tracepoint
  infrastructure is more robust.

  Note, there is now a duplicate of a cpu online test, because this
  update does not remove the individual checks.  But the overhead is
  small enough that the removal can be done in another release.

  The second change is strange linker breakage due to the branch
  tracer's builtin_constant_p() check failing, and treating the
  condition as a variable instead of a constant.  Arnd Bergmann found
  that this can be fixed by testing !!(cond) instead of just (cond)"

* tag 'trace-fixes-v4.5-rc4' of git://git.kernel.org/pub/scm/linux/kernel/git/rostedt/linux-trace:
  tracing: Fix freak link error caused by branch tracer
  tracepoints: Do not trace when cpu is offline
parents 65c23c65 b33c8ff4
...@@ -144,7 +144,7 @@ void ftrace_likely_update(struct ftrace_branch_data *f, int val, int expect); ...@@ -144,7 +144,7 @@ void ftrace_likely_update(struct ftrace_branch_data *f, int val, int expect);
*/ */
#define if(cond, ...) __trace_if( (cond , ## __VA_ARGS__) ) #define if(cond, ...) __trace_if( (cond , ## __VA_ARGS__) )
#define __trace_if(cond) \ #define __trace_if(cond) \
if (__builtin_constant_p((cond)) ? !!(cond) : \ if (__builtin_constant_p(!!(cond)) ? !!(cond) : \
({ \ ({ \
int ______r; \ int ______r; \
static struct ftrace_branch_data \ static struct ftrace_branch_data \
......
...@@ -14,8 +14,10 @@ ...@@ -14,8 +14,10 @@
* See the file COPYING for more details. * See the file COPYING for more details.
*/ */
#include <linux/smp.h>
#include <linux/errno.h> #include <linux/errno.h>
#include <linux/types.h> #include <linux/types.h>
#include <linux/cpumask.h>
#include <linux/rcupdate.h> #include <linux/rcupdate.h>
#include <linux/tracepoint-defs.h> #include <linux/tracepoint-defs.h>
...@@ -132,6 +134,9 @@ extern void syscall_unregfunc(void); ...@@ -132,6 +134,9 @@ extern void syscall_unregfunc(void);
void *it_func; \ void *it_func; \
void *__data; \ void *__data; \
\ \
if (!cpu_online(raw_smp_processor_id())) \
return; \
\
if (!(cond)) \ if (!(cond)) \
return; \ return; \
prercu; \ prercu; \
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment