• S
    ftrace: Allow ftrace_ops to use the hashes from other ops · 33b7f99c
    Steven Rostedt (Red Hat) 提交于
    Currently the top level debug file system function tracer shares its
    ftrace_ops with the function graph tracer. This was thought to be fine
    because the tracers are not used together, as one can only enable
    function or function_graph tracer in the current_tracer file.
    
    But that assumption proved to be incorrect. The function profiler
    can use the function graph tracer when function tracing is enabled.
    Since all function graph users uses the function tracing ftrace_ops
    this causes a conflict and when a user enables both function profiling
    as well as the function tracer it will crash ftrace and disable it.
    
    The quick solution so far is to move them as separate ftrace_ops like
    it was earlier. The problem though is to synchronize the functions that
    are traced because both function and function_graph tracer are limited
    by the selections made in the set_ftrace_filter and set_ftrace_notrace
    files.
    
    To handle this, a new structure is made called ftrace_ops_hash. This
    structure will now hold the filter_hash and notrace_hash, and the
    ftrace_ops will point to this structure. That will allow two ftrace_ops
    to share the same hashes.
    
    Since most ftrace_ops do not share the hashes, and to keep allocation
    simple, the ftrace_ops structure will include both a pointer to the
    ftrace_ops_hash called func_hash, as well as the structure itself,
    called local_hash. When the ops are registered, the func_hash pointer
    will be initialized to point to the local_hash within the ftrace_ops
    structure. Some of the ftrace internal ftrace_ops will be initialized
    statically. This will allow for the function and function_graph tracer
    to have separate ops but still share the same hash tables that determine
    what functions they trace.
    
    Cc: stable@vger.kernel.org # 3.16 (apply after 3.17-rc4 is out)
    Signed-off-by: NSteven Rostedt <rostedt@goodmis.org>
    33b7f99c
ftrace.c 123.3 KB