OSDN Git Service

Merge tag 'trace-v5.5' of git://git.kernel.org/pub/scm/linux/kernel/git/rostedt/linux...
authorLinus Torvalds <torvalds@linux-foundation.org>
Wed, 27 Nov 2019 19:42:01 +0000 (11:42 -0800)
committerLinus Torvalds <torvalds@linux-foundation.org>
Wed, 27 Nov 2019 19:42:01 +0000 (11:42 -0800)
Pull tracing updates from Steven Rostedt:
 "New tracing features:

   - New PERMANENT flag to ftrace_ops when attaching a callback to a
     function.

     As /proc/sys/kernel/ftrace_enabled when set to zero will disable
     all attached callbacks in ftrace, this has a detrimental impact on
     live kernel tracing, as it disables all that it patched. If a
     ftrace_ops is registered to ftrace with the PERMANENT flag set, it
     will prevent ftrace_enabled from being disabled, and if
     ftrace_enabled is already disabled, it will prevent a ftrace_ops
     with PREMANENT flag set from being registered.

   - New register_ftrace_direct().

     As eBPF would like to register its own trampolines to be called by
     the ftrace nop locations directly, without going through the ftrace
     trampoline, this function has been added. This allows for eBPF
     trampolines to live along side of ftrace, perf, kprobe and live
     patching. It also utilizes the ftrace enabled_functions file that
     keeps track of functions that have been modified in the kernel, to
     allow for security auditing.

   - Allow for kernel internal use of ftrace instances.

     Subsystems in the kernel can now create and destroy their own
     tracing instances which allows them to have their own tracing
     buffer, and be able to record events without worrying about other
     users from writing over their data.

   - New seq_buf_hex_dump() that lets users use the hex_dump() in their
     seq_buf usage.

   - Notifications now added to tracing_max_latency to allow user space
     to know when a new max latency is hit by one of the latency
     tracers.

   - Wider spread use of generic compare operations for use of bsearch
     and friends.

   - More synthetic event fields may be defined (32 up from 16)

   - Use of xarray for architectures with sparse system calls, for the
     system call trace events.

  This along with small clean ups and fixes"

* tag 'trace-v5.5' of git://git.kernel.org/pub/scm/linux/kernel/git/rostedt/linux-trace: (51 commits)
  tracing: Enable syscall optimization for MIPS
  tracing: Use xarray for syscall trace events
  tracing: Sample module to demonstrate kernel access to Ftrace instances.
  tracing: Adding new functions for kernel access to Ftrace instances
  tracing: Fix Kconfig indentation
  ring-buffer: Fix typos in function ring_buffer_producer
  ftrace: Use BIT() macro
  ftrace: Return ENOTSUPP when DYNAMIC_FTRACE_WITH_DIRECT_CALLS is not configured
  ftrace: Rename ftrace_graph_stub to ftrace_stub_graph
  ftrace: Add a helper function to modify_ftrace_direct() to allow arch optimization
  ftrace: Add helper find_direct_entry() to consolidate code
  ftrace: Add another check for match in register_ftrace_direct()
  ftrace: Fix accounting bug with direct->count in register_ftrace_direct()
  ftrace/selftests: Fix spelling mistake "wakeing" -> "waking"
  tracing: Increase SYNTH_FIELDS_MAX for synthetic_events
  ftrace/samples: Add a sample module that implements modify_ftrace_direct()
  ftrace: Add modify_ftrace_direct()
  tracing: Add missing "inline" in stub function of latency_fsnotify()
  tracing: Remove stray tab in TRACE_EVAL_MAP_FILE's help text
  tracing: Use seq_buf_hex_dump() to dump buffers
  ...

12 files changed:
1  2 
arch/Kconfig
arch/mips/Kconfig
arch/x86/Kconfig
arch/x86/kernel/ftrace_64.S
include/asm-generic/vmlinux.lds.h
include/linux/ftrace.h
kernel/module.c
kernel/trace/Kconfig
kernel/trace/ftrace.c
samples/Kconfig
samples/Makefile
tools/testing/selftests/livepatch/Makefile

diff --cc arch/Kconfig
Simple merge
Simple merge
Simple merge
Simple merge
  #endif
  
  #ifdef CONFIG_FTRACE_MCOUNT_RECORD
 -#ifdef CC_USING_PATCHABLE_FUNCTION_ENTRY
  /*
 + * The ftrace call sites are logged to a section whose name depends on the
 + * compiler option used. A given kernel image will only use one, AKA
 + * FTRACE_CALLSITE_SECTION. We capture all of them here to avoid header
 + * dependencies for FTRACE_CALLSITE_SECTION's definition.
++ *
+  * Need to also make ftrace_stub_graph point to ftrace_stub
+  * so that the same stub location may have different protocols
+  * and not mess up with C verifiers.
   */
  #define MCOUNT_REC()  . = ALIGN(8);                           \
                        __start_mcount_loc = .;                 \
 -                      KEEP(*(__patchable_function_entries))   \
 -                      __stop_mcount_loc = .;                  \
 -                      ftrace_stub_graph = ftrace_stub;
 -#else
 -#define MCOUNT_REC()  . = ALIGN(8);                           \
 -                      __start_mcount_loc = .;                 \
                        KEEP(*(__mcount_loc))                   \
-                       __stop_mcount_loc = .;
 +                      KEEP(*(__patchable_function_entries))   \
 -#endif
+                       __stop_mcount_loc = .;                  \
+                       ftrace_stub_graph = ftrace_stub;
  #else
- #define MCOUNT_REC()
+ # ifdef CONFIG_FUNCTION_TRACER
+ #  define MCOUNT_REC()        ftrace_stub_graph = ftrace_stub;
+ # else
+ #  define MCOUNT_REC()
+ # endif
  #endif
  
  #ifdef CONFIG_TRACE_BRANCH_PROFILING
Simple merge
diff --cc kernel/module.c
Simple merge
Simple merge
Simple merge
diff --cc samples/Kconfig
Simple merge
Simple merge
@@@ -5,6 -5,6 +5,7 @@@ TEST_PROGS := 
        test-livepatch.sh \
        test-callbacks.sh \
        test-shadow-vars.sh \
-       test-state.sh
++      test-state.sh \
+       test-ftrace.sh
  
  include ../lib.mk