tree d502c303d316baa7ad527d804cd0f7a7af2c8e8c
parent b4c96494130558690ed7e96c126af4c4ef96cb3c
author Andi Kleen <[EMAIL PROTECTED]> Tue Apr 12 08:25:44 2005
committer Linus Torvalds <[EMAIL PROTECTED]> Tue Apr 12 08:25:44 2005
[PATCH] x86_64: Keep only a single debug notifier chain
Calling a notifier three times in the debug handler does not make much sense,
because a debugger can figure out the various conditions by itself. Remove
the additional calls to DIE_DEBUG and DIE_DEBUGSTEP completely.
This matches what i386 does now.
This also makes sure interrupts are always still disabled when calling a
debugger, which prevents:
BUG: using smp_processor_id() in preemptible [00000001] code: tpopf/1470
caller is post_kprobe_handler+0x9/0x70
Call Trace:<ffffffff8024f10f>{smp_processor_id+191} <ffffffff80120e69>{post_kpro
be_handler+9}
<ffffffff80120f7a>{kprobe_exceptions_notify+58}
<ffffffff80144fc0>{notifier_call_chain+32} <ffffffff80110daf>{do_debug+335}
<ffffffff8010f513>{debug+127} <EOE>
on preemptible debug kernels with kprobes when single stepping in user space.
This was probably a bug even on non preempt kernels, this function was
supposed to be running with interrupts off according to a comment there.
Note to third part debugger maintainers: please double check your debugger can
still single step.
Cc: <[EMAIL PROTECTED]>
Cc: <[EMAIL PROTECTED]>
Cc: <[EMAIL PROTECTED]>
Cc: <[EMAIL PROTECTED]>
Cc: <[EMAIL PROTECTED]>
Signed-off-by: Andi Kleen <[EMAIL PROTECTED]>
Signed-off-by: Andrew Morton <[EMAIL PROTECTED]>
Signed-off-by: Linus Torvalds <[EMAIL PROTECTED]>
arch/x86_64/kernel/traps.c | 14 +++-----------
include/asm-x86_64/kdebug.h | 1 -
2 files changed, 3 insertions(+), 12 deletions(-)
Index: arch/x86_64/kernel/traps.c
===================================================================
--- 5817f3f41eb779ca0c6271509604b6f779b6c3df/arch/x86_64/kernel/traps.c
(mode:100644 sha1:1ad2477f57e5ebc140aeb5a11bf891dafe2960bf)
+++ d502c303d316baa7ad527d804cd0f7a7af2c8e8c/arch/x86_64/kernel/traps.c
(mode:100644 sha1:c1bbf257b07445f18c41e75623b3183e140b9b8b)
@@ -659,9 +659,9 @@
asm("movq %%db6,%0" : "=r" (condition));
if (notify_die(DIE_DEBUG, "debug", regs, condition, error_code,
- SIGTRAP) == NOTIFY_STOP) {
+ SIGTRAP) == NOTIFY_STOP)
return;
- }
+
conditional_sti(regs);
/* Mask out spurious debug traps due to lazy DR7 setting */
@@ -674,9 +674,7 @@
tsk->thread.debugreg6 = condition;
/* Mask out spurious TF errors due to lazy TF clearing */
- if ((condition & DR_STEP) &&
- (notify_die(DIE_DEBUGSTEP, "debugstep", regs, condition,
- 1, SIGTRAP) != NOTIFY_STOP)) {
+ if (condition & DR_STEP) {
/*
* The TF error should be masked out only if the current
* process is not traced and if the TRAP flag has been set
@@ -711,16 +709,10 @@
force_sig_info(SIGTRAP, &info, tsk);
clear_dr7:
asm volatile("movq %0,%%db7"::"r"(0UL));
- notify_die(DIE_DEBUG, "debug", regs, condition, 1, SIGTRAP);
return;
clear_TF_reenable:
set_tsk_thread_flag(tsk, TIF_SINGLESTEP);
-
-clear_TF:
- /* RED-PEN could cause spurious errors */
- if (notify_die(DIE_DEBUG, "debug2", regs, condition, 1, SIGTRAP)
- != NOTIFY_STOP)
regs->eflags &= ~TF_MASK;
}
Index: include/asm-x86_64/kdebug.h
===================================================================
--- 5817f3f41eb779ca0c6271509604b6f779b6c3df/include/asm-x86_64/kdebug.h
(mode:100644 sha1:3ffed61e960ac5b8ec9f926610e2eeb39402f73f)
+++ d502c303d316baa7ad527d804cd0f7a7af2c8e8c/include/asm-x86_64/kdebug.h
(mode:100644 sha1:1a5e3edcd8720816417b24e32249671943965812)
@@ -23,7 +23,6 @@
DIE_OOPS = 1,
DIE_INT3,
DIE_DEBUG,
- DIE_DEBUGSTEP,
DIE_PANIC,
DIE_NMI,
DIE_DIE,
-
To unsubscribe from this list: send the line "unsubscribe bk-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at http://vger.kernel.org/majordomo-info.html