diff options
author | Steven Rostedt <srostedt@redhat.com> | 2011-07-02 05:04:36 +0200 |
---|---|---|
committer | Ingo Molnar <mingo@elte.hu> | 2011-07-07 19:22:32 +0200 |
commit | e08fbb78f03fe2c4f88824faf6f51ce6af185e11 (patch) | |
tree | c15a70f94c4123afd3075a0ed73ea18022f7ad7a /lib/parser.c | |
parent | Merge branch 'tip/perf/core-2' of git://git.kernel.org/pub/scm/linux/kernel/g... (diff) | |
download | linux-e08fbb78f03fe2c4f88824faf6f51ce6af185e11.tar.xz linux-e08fbb78f03fe2c4f88824faf6f51ce6af185e11.zip |
tracing, x86/irq: Do not trace arch_local_{*,irq_*}() functions
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: Steven Rostedt <rostedt@goodmis.org>
Link: http://lkml.kernel.org/r/20110702033852.733414762@goodmis.org
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Diffstat (limited to 'lib/parser.c')
0 files changed, 0 insertions, 0 deletions