• Steven Rostedt (Red Hat)'s avatar
    tracing: Add trace_<tracepoint>_enabled() function · 7c65bbc7
    Steven Rostedt (Red Hat) authored
    There are some code paths in the kernel that need to do some preparations
    before it calls a tracepoint. As that code is worthless overhead when
    the tracepoint is not enabled, it would be prudent to have that code
    only run when the tracepoint is active. To accomplish this, all tracepoints
    now get a static inline function called "trace_<tracepoint-name>_enabled()"
    which returns true when the tracepoint is enabled and false otherwise.
    
    As an added bonus, that function uses the static_key of the tracepoint
    such that no branch is needed.
    
      if (trace_mytracepoint_enabled()) {
    	arg = process_tp_arg();
    	trace_mytracepoint(arg);
      }
    
    Will keep the "process_tp_arg()" (which may be expensive to run) from
    being executed when the tracepoint isn't enabled.
    
    It's best to encapsulate the tracepoint itself in the if statement
    just to keep races. For example, if you had:
    
      if (trace_mytracepoint_enabled())
    	arg = process_tp_arg();
      trace_mytracepoint(arg);
    
    There's a chance that the tracepoint could be enabled just after the
    if statement, and arg will be undefined when calling the tracepoint.
    
    Link: http://lkml.kernel.org/r/20140506094407.507b6435@gandalf.local.homeAcked-by: default avatarMathieu Desnoyers <mathieu.desnoyers@efficios.com>
    Signed-off-by: default avatarSteven Rostedt <rostedt@goodmis.org>
    7c65bbc7
tracepoints.txt 5.1 KB