tree 7b17fd7408b47892e391604c6791674f03109e1c
parent ece90303ec7e2e8d8610eb03ee7648755dd8efe7
author Andi Kleen <[EMAIL PROTECTED]> Sun, 17 Apr 2005 05:25:13 -0700
committer Linus Torvalds <[EMAIL PROTECTED]> Sun, 17 Apr 2005 05:25:13 -0700

[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]>

 x86_64/kernel/traps.c |   14 +++-----------
 asm-x86_64/kdebug.h   |    1 -
 2 files changed, 3 insertions(+), 12 deletions(-)

Index: arch/x86_64/kernel/traps.c
===================================================================
--- 1a6b38b4afd5dae194c93a79152c3bb18460c38f/arch/x86_64/kernel/traps.c  
(mode:100644 sha1:2f42fd5c075ffaf56788f66222a1f917c4ea6810)
+++ 7b17fd7408b47892e391604c6791674f03109e1c/arch/x86_64/kernel/traps.c  
(mode:100644 sha1:f6ccf155e3e5851a9819e6014400f093b0803246)
@@ -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
===================================================================
--- 1a6b38b4afd5dae194c93a79152c3bb18460c38f/include/asm-x86_64/kdebug.h  
(mode:100644 sha1:adb6f918d3ad719600c034a04b33ce1a5d32b29e)
+++ 7b17fd7408b47892e391604c6791674f03109e1c/include/asm-x86_64/kdebug.h  
(mode:100644 sha1:6277f75cbb4b3f1a25330cf80280e9118f63f8a3)
@@ -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

Reply via email to