diff options
author | Ingo Molnar <mingo@kernel.org> | 2012-05-07 11:03:52 +0200 |
---|---|---|
committer | Ingo Molnar <mingo@kernel.org> | 2012-05-07 11:03:52 +0200 |
commit | 19631cb3d67c24c8b1fa58bc69bc2fed8d15095d (patch) | |
tree | a56d9e11f23e3433f9eaa5b3f9dec7bef378c37e /arch/x86/kernel/traps.c | |
parent | 1fa2e84db3f95adab8d9c2aa245e9a0ebf32248a (diff) | |
parent | 59a094c994a138049b41a44bc29cff9407d51c5b (diff) |
Merge branch 'tip/perf/core-4' of git://git.kernel.org/pub/scm/linux/kernel/git/rostedt/linux-trace into perf/core
Diffstat (limited to 'arch/x86/kernel/traps.c')
-rw-r--r-- | arch/x86/kernel/traps.c | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/arch/x86/kernel/traps.c b/arch/x86/kernel/traps.c index ff9281f1602..92d5756d85f 100644 --- a/arch/x86/kernel/traps.c +++ b/arch/x86/kernel/traps.c @@ -50,6 +50,7 @@ #include <asm/processor.h> #include <asm/debugreg.h> #include <linux/atomic.h> +#include <asm/ftrace.h> #include <asm/traps.h> #include <asm/desc.h> #include <asm/i387.h> @@ -303,8 +304,13 @@ gp_in_kernel: } /* May run on IST stack. */ -dotraplinkage void __kprobes do_int3(struct pt_regs *regs, long error_code) +dotraplinkage void __kprobes notrace do_int3(struct pt_regs *regs, long error_code) { +#ifdef CONFIG_DYNAMIC_FTRACE + /* ftrace must be first, everything else may cause a recursive crash */ + if (unlikely(modifying_ftrace_code) && ftrace_int3_handler(regs)) + return; +#endif #ifdef CONFIG_KGDB_LOW_LEVEL_TRAP if (kgdb_ll_trap(DIE_INT3, "int3", regs, error_code, X86_TRAP_BP, SIGTRAP) == NOTIFY_STOP) |