• Linus Torvalds's avatar
    Merge tag 'ftrace-v6.11' of git://git.kernel.org/pub/scm/linux/kernel/git/trace/linux-trace · 70045bfc
    Linus Torvalds authored
    Pull ftrace updates from Steven Rostedt:
     "Rewrite of function graph tracer to allow multiple users
    
      Up until now, the function graph tracer could only have a single user
      attached to it. If another user tried to attach to the function graph
      tracer while one was already attached, it would fail. Allowing
      function graph tracer to have more than one user has been asked for
      since 2009, but it required a rewrite to the logic to pull it off so
      it never happened. Until now!
    
      There's three systems that trace the return of a function. That is
      kretprobes, function graph tracer, and BPF. kretprobes and function
      graph tracing both do it similarly. The difference is that kretprobes
      uses a shadow stack per callback and function graph tracer creates a
      shadow stack for all tasks. The function graph tracer method makes it
      possible to trace the return of all functions. As kretprobes now needs
      that feature too, allowing it to use function graph tracer was needed.
      BPF also wants to trace the return of many probes and its method
      doesn't scale either. Having it use function graph tracer would
      improve that.
    
      By allowing function graph tracer to have multiple users allows both
      kretprobes and BPF to use function graph tracer in these cases. This
      will allow kretprobes code to be removed in the future as it's version
      will no longer be needed.
    
      Note, function graph tracer is only limited to 16 simultaneous users,
      due to shadow stack size and allocated slots"
    
    * tag 'ftrace-v6.11' of git://git.kernel.org/pub/scm/linux/kernel/git/trace/linux-trace: (49 commits)
      fgraph: Use str_plural() in test_graph_storage_single()
      function_graph: Add READ_ONCE() when accessing fgraph_array[]
      ftrace: Add missing kerneldoc parameters to unregister_ftrace_direct()
      function_graph: Everyone uses HAVE_FUNCTION_GRAPH_RET_ADDR_PTR, remove it
      function_graph: Fix up ftrace_graph_ret_addr()
      function_graph: Make fgraph_update_pid_func() a stub for !DYNAMIC_FTRACE
      function_graph: Rename BYTE_NUMBER to CHAR_NUMBER in selftests
      fgraph: Remove some unused functions
      ftrace: Hide one more entry in stack trace when ftrace_pid is enabled
      function_graph: Do not update pid func if CONFIG_DYNAMIC_FTRACE not enabled
      function_graph: Make fgraph_do_direct static key static
      ftrace: Fix prototypes for ftrace_startup/shutdown_subops()
      ftrace: Assign RCU list variable with rcu_assign_ptr()
      ftrace: Assign ftrace_list_end to ftrace_ops_list type cast to RCU
      ftrace: Declare function_trace_op in header to quiet sparse warning
      ftrace: Add comments to ftrace_hash_move() and friends
      ftrace: Convert "inc" parameter to bool in ftrace_hash_rec_update_modify()
      ftrace: Add comments to ftrace_hash_rec_disable/enable()
      ftrace: Remove "filter_hash" parameter from __ftrace_hash_rec_update()
      ftrace: Rename dup_hash() and comment it
      ...
    70045bfc
ftrace.c 212 KB