Merge tag 'trace-v4.12' of git://git.kernel.org/pub/scm/linux/kernel/git/rostedt...
authorLinus Torvalds <torvalds@linux-foundation.org>
Thu, 4 May 2017 01:41:21 +0000 (18:41 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Thu, 4 May 2017 01:41:21 +0000 (18:41 -0700)
Pull tracing updates from Steven Rostedt:
 "New features for this release:

   - Pretty much a full rewrite of the processing of function plugins.
     i.e. echo do_IRQ:stacktrace > set_ftrace_filter

   - The rewrite was needed to add plugins to be unique to tracing
     instances. i.e. mkdir instance/foo; cd instances/foo; echo
     do_IRQ:stacktrace > set_ftrace_filter The old way was written very
     hacky. This removes a lot of those hacks.

   - New "function-fork" tracing option. When set, pids in the
     set_ftrace_pid will have their children added when the processes
     with their pids listed in the set_ftrace_pid file forks.

   - Exposure of "maxactive" for kretprobe in kprobe_events

   - Allow for builtin init functions to be traced by the function
     tracer (via the kernel command line). Module init function tracing
     will come in the next release.

   - Added more selftests, and have selftests also test in an instance"

* tag 'trace-v4.12' of git://git.kernel.org/pub/scm/linux/kernel/git/rostedt/linux-trace: (60 commits)
  ring-buffer: Return reader page back into existing ring buffer
  selftests: ftrace: Allow some event trigger tests to run in an instance
  selftests: ftrace: Have some basic tests run in a tracing instance too
  selftests: ftrace: Have event tests also run in an tracing instance
  selftests: ftrace: Make func_event_triggers and func_traceonoff_triggers tests do instances
  selftests: ftrace: Allow some tests to be run in a tracing instance
  tracing/ftrace: Allow for instances to trigger their own stacktrace probes
  tracing/ftrace: Allow for the traceonoff probe be unique to instances
  tracing/ftrace: Enable snapshot function trigger to work with instances
  tracing/ftrace: Allow instances to have their own function probes
  tracing/ftrace: Add a better way to pass data via the probe functions
  ftrace: Dynamically create the probe ftrace_ops for the trace_array
  tracing: Pass the trace_array into ftrace_probe_ops functions
  tracing: Have the trace_array hold the list of registered func probes
  ftrace: If the hash for a probe fails to update then free what was initialized
  ftrace: Have the function probes call their own function
  ftrace: Have each function probe use its own ftrace_ops
  ftrace: Have unregister_ftrace_function_probe_func() return a value
  ftrace: Add helper function ftrace_hash_move_and_update_ops()
  ftrace: Remove data field from ftrace_func_probe structure
  ...

1  2 
Documentation/trace/kprobetrace.txt
arch/x86/kernel/ftrace.c
init/main.c
kernel/trace/Kconfig
kernel/trace/ftrace.c
kernel/trace/ring_buffer.c
kernel/trace/trace.c
kernel/trace/trace.h
kernel/trace/trace_kprobe.c
mm/page_alloc.c

Simple merge
Simple merge
diff --cc init/main.c
Simple merge
Simple merge
Simple merge
Simple merge
index 0029fe62b2450361923ebb93346206cded759a09,5b645b0fbbb8bc509d6af2d7f077d57ec06e0c96..80eda7d254ed99640efcc90956692cfebf8eaafa
@@@ -6732,13 -6878,11 +6877,13 @@@ ftrace_trace_snapshot_callback(struct t
                return ret;
  
   out_reg:
-       ret = alloc_snapshot(&global_trace);
 -      ret = register_ftrace_function_probe(glob, tr, ops, count);
++      ret = alloc_snapshot(tr);
 +      if (ret < 0)
 +              goto out;
  
-       ret = register_ftrace_function_probe(glob, ops, count);
 -      if (ret >= 0)
 -              alloc_snapshot(tr);
++      ret = register_ftrace_function_probe(glob, tr, ops, count);
  
 + out:
        return ret < 0 ? ret : 0;
  }
  
index d19d52d600d623e9d9f0676891e19c6e5e880bce,bc011c1f3d71c22392280931b82f73a0a46a3a09..291a1bca5748870011c70e639fe802785945a0a6
@@@ -896,7 -912,8 +912,9 @@@ int using_ftrace_ops_list_func(void)
  void ftrace_init_tracefs(struct trace_array *tr, struct dentry *d_tracer);
  void ftrace_init_tracefs_toplevel(struct trace_array *tr,
                                  struct dentry *d_tracer);
 +void ftrace_clear_pids(struct trace_array *tr);
+ int init_function_trace(void);
+ void ftrace_pid_follow_fork(struct trace_array *tr, bool enable);
  #else
  static inline int ftrace_trace_task(struct trace_array *tr)
  {
@@@ -915,7 -932,8 +933,9 @@@ ftrace_init_global_array_ops(struct tra
  static inline void ftrace_reset_array_ops(struct trace_array *tr) { }
  static inline void ftrace_init_tracefs(struct trace_array *tr, struct dentry *d) { }
  static inline void ftrace_init_tracefs_toplevel(struct trace_array *tr, struct dentry *d) { }
 +static inline void ftrace_clear_pids(struct trace_array *tr) { }
+ static inline int init_function_trace(void) { return 0; }
+ static inline void ftrace_pid_follow_fork(struct trace_array *tr, bool enable) { }
  /* ftace_func_t type is not defined, use macro instead of static inline */
  #define ftrace_init_array_ops(tr, func) do { } while (0)
  #endif /* CONFIG_FUNCTION_TRACER */
Simple merge
diff --cc mm/page_alloc.c
Simple merge