ftrace: Have function graph tracer use global_ops for filtering
authorSteven Rostedt (Red Hat) <rostedt@goodmis.org>
Fri, 2 May 2014 03:05:31 +0000 (23:05 -0400)
committerSteven Rostedt <rostedt@goodmis.org>
Fri, 2 May 2014 03:21:16 +0000 (23:21 -0400)
Commit 4104d326b670 "ftrace: Remove global function list and call
function directly" cleaned up the global_ops filtering and made
the code simpler. But it left out function graph filtering which
also depended on that code. The function graph filtering still
needs to use global_ops as the filter otherwise it wont filter
at all.

Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
kernel/trace/ftrace.c

index 34b098bfded4a0df6def9fedf1012120c2dc3c67..9eb1aa03a18df5630ebca83e47d2ef447d76355f 100644 (file)
@@ -5008,12 +5008,6 @@ ftrace_suspend_notifier_call(struct notifier_block *bl, unsigned long state,
        return NOTIFY_DONE;
 }
 
-/* Just a place holder for function graph */
-static struct ftrace_ops fgraph_ops __read_mostly = {
-       .func           = ftrace_stub,
-       .flags          = FTRACE_OPS_FL_STUB | FTRACE_OPS_FL_RECURSION_SAFE,
-};
-
 static int ftrace_graph_entry_test(struct ftrace_graph_ent *trace)
 {
        if (!ftrace_ops_test(&global_ops, trace->func, NULL))
@@ -5076,7 +5070,10 @@ int register_ftrace_graph(trace_func_graph_ret_t retfunc,
        ftrace_graph_entry = ftrace_graph_entry_test;
        update_function_graph_func();
 
-       ret = ftrace_startup(&fgraph_ops, FTRACE_START_FUNC_RET);
+       /* Function graph doesn't use the .func field of global_ops */
+       global_ops.flags |= FTRACE_OPS_FL_STUB;
+
+       ret = ftrace_startup(&global_ops, FTRACE_START_FUNC_RET);
 
 out:
        mutex_unlock(&ftrace_lock);
@@ -5094,7 +5091,8 @@ void unregister_ftrace_graph(void)
        ftrace_graph_return = (trace_func_graph_ret_t)ftrace_stub;
        ftrace_graph_entry = ftrace_graph_entry_stub;
        __ftrace_graph_entry = ftrace_graph_entry_stub;
-       ftrace_shutdown(&fgraph_ops, FTRACE_STOP_FUNC_RET);
+       ftrace_shutdown(&global_ops, FTRACE_STOP_FUNC_RET);
+       global_ops.flags &= ~FTRACE_OPS_FL_STUB;
        unregister_pm_notifier(&ftrace_suspend_notifier);
        unregister_trace_sched_switch(ftrace_graph_probe_sched_switch, NULL);