lkml.org 
[lkml]   [2012]   [Mar]   [14]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[PATCH 4/6] ftrace: Fix function_graph for archs that test ftrace_trace_function
    From: Rajesh Bhagat <rajesh.lnx@gmail.com>

    When CONFIG_DYNAMIC_FTRACE is not set, some archs (ARM) test
    the variable function_trace_function to determine if it should
    call the function tracer. If it is not set to ftrace_stub, then
    it will call the function and return, and not call the function
    graph tracer.

    But some of these archs (ARM) do not have the assembly code
    to test if function tracing is enabled or not (quick stop of tracing)
    and it calls the helper routine ftrace_test_stop_func() instead.

    If function tracer is enabled and then disabled, the variable
    ftrace_trace_function is still set to the helper routine
    ftrace_test_stop_func(), and not to ftrace_stub. This will
    prevent the function graph tracer from ever running.

    Output before patch
    /debug/tracing # echo function > current_tracer
    /debug/tracing # echo function_graph > current_tracer
    /debug/tracing # cat trace

    Output after patch
    /debug/tracing # echo function > current_tracer
    /debug/tracing # echo function_graph > current_tracer
    /debug/tracing # cat trace
    0) ! 253.375 us | } /* irq_enter */
    0) | generic_handle_irq() {
    0) | handle_fasteoi_irq() {
    0) 9.208 us | _raw_spin_lock();
    0) | handle_irq_event() {
    0) | handle_irq_event_percpu() {

    Signed-off-by: Rajesh Bhagat <rajesh.lnx@gmail.com>
    Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
    ---
    kernel/trace/ftrace.c | 3 ++-
    1 files changed, 2 insertions(+), 1 deletions(-)

    diff --git a/kernel/trace/ftrace.c b/kernel/trace/ftrace.c
    index 867bd1d..0fa92f6 100644
    --- a/kernel/trace/ftrace.c
    +++ b/kernel/trace/ftrace.c
    @@ -249,7 +249,8 @@ static void update_ftrace_function(void)
    #else
    __ftrace_trace_function = func;
    #endif
    - ftrace_trace_function = ftrace_test_stop_func;
    + ftrace_trace_function =
    + (func == ftrace_stub) ? func : ftrace_test_stop_func;
    #endif
    }

    --
    1.7.8.3

    [unhandled content-type:application/pgp-signature]
    \
     
     \ /
      Last update: 2012-03-14 17:31    [W:0.031 / U:30.336 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site