• Steven Rostedt's avatar
    tracing, x86/irq: Do not trace arch_local_{*,irq_*}() functions · e08fbb78
    Steven Rostedt authored
    I triggered a triple fault with gcc 4.5.1 because it did not
    honor the inline annotation to arch_local_save_flags() function
    and that function was added to the pool of functions traced by
    the function tracer.
    
    When preempt_schedule() called arch_local_save_flags() (called
    by irqs_disabled()), it was traced, but the first thing the
    function tracer does is disable preemption. When it enables
    preemption, the NEED_RESCHED flag will not have been cleared and
    the preemption check will trigger the call to preempt_schedule()
    again.
    
    Although the dynamic function tracer crashed immediately, the
    static version of the function tracer (CONFIG_DYNAMIC_FTRACE is
    not set) actually was able to show where the problem was.
    
     swapper-1       3.N.. 103885us : arch_local_save_flags <-preempt_schedule
     swapper-1       3.N.. 103886us : arch_local_save_flags <-preempt_schedule
     swapper-1       3.N.. 103886us : arch_local_save_flags <-preempt_schedule
     swapper-1       3.N.. 103887us : arch_local_save_flags <-preempt_schedule
     swapper-1       3.N.. 103887us : arch_local_save_flags <-preempt_schedule
     swapper-1       3.N.. 103888us : arch_local_save_flags <-preempt_schedule
     swapper-1       3.N.. 103888us : arch_local_save_flags <-preempt_schedule
    
    It went on for a while before it triple faulted with a corrupted
    stack.
    
    The arch_local_save_flags and arch_local_irq_* functions should
    not be traced. Even though they are marked as inline, gcc may
    still make them a function and enable tracing of them.
    
    The simple solution is to just mark them as notrace. I had to
    add the <linux/types.h> for this file to include the notrace
    tag.
    Signed-off-by: default avatarSteven Rostedt <rostedt@goodmis.org>
    Link: http://lkml.kernel.org/r/20110702033852.733414762@goodmis.orgSigned-off-by: default avatarIngo Molnar <mingo@elte.hu>
    e08fbb78
irqflags.h 3.98 KB