ftrace: Set callback to ftrace_stub when no ops are registered
authorSteven Rostedt (Red Hat) <rostedt@goodmis.org>
Wed, 10 Sep 2014 14:42:46 +0000 (10:42 -0400)
committerSteven Rostedt <rostedt@goodmis.org>
Wed, 10 Sep 2014 14:48:18 +0000 (10:48 -0400)
The clean up that adds the helper function ftrace_ops_get_func()
caused the default function to not change when DYNAMIC_FTRACE was not
set and no ftrace_ops were registered. Although static tracing is
not very useful (not having DYNAMIC_FTRACE set), it is still supported
and we don't want to break it.

Clean up the if statement even more to specifically have the default
function call ftrace_stub when no ftrace_ops are registered. This
fixes the small bug for static tracing as well as makes the code a
bit more understandable.

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

index dabf734..708aea4 100644 (file)
@@ -254,17 +254,24 @@ static void update_ftrace_function(void)
        ftrace_func_t func;
 
        /*
+        * Prepare the ftrace_ops that the arch callback will use.
+        * If there's only one ftrace_ops registered, the ftrace_ops_list
+        * will point to the ops we want.
+        */
+       set_function_trace_op = ftrace_ops_list;
+
+       /* If there's no ftrace_ops registered, just call the stub function */
+       if (ftrace_ops_list == &ftrace_list_end) {
+               func = ftrace_stub;
+
+       /*
         * If we are at the end of the list and this ops is
         * recursion safe and not dynamic and the arch supports passing ops,
         * then have the mcount trampoline call the function directly.
         */
-       if (ftrace_ops_list == &ftrace_list_end ||
-           (ftrace_ops_list->next == &ftrace_list_end)) {
-
-               /* Set the ftrace_ops that the arch callback uses */
-               set_function_trace_op = ftrace_ops_list;
-
+       } else if (ftrace_ops_list->next == &ftrace_list_end) {
                func = ftrace_ops_get_func(ftrace_ops_list);
+
        } else {
                /* Just use the default ftrace_ops */
                set_function_trace_op = &ftrace_list_end;