diff options
author | Andi Kleen <ak@suse.de> | 2005-04-16 18:25:13 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@ppc970.osdl.org> | 2005-04-16 18:25:13 -0400 |
commit | daeeafecf029a05a304fa299706b3ecc90e16175 (patch) | |
tree | 7b17fd7408b47892e391604c6791674f03109e1c /include/asm-x86_64 | |
parent | ece90303ec7e2e8d8610eb03ee7648755dd8efe7 (diff) |
[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: <prasanna@in.ibm.com>
Cc: <jbeulich@novell.com>
Cc: <kaos@sgi.com>
Cc: <jim.houston@ccur.com>
Cc: <jfv@bluesong.net>
Signed-off-by: Andi Kleen <ak@suse.de>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'include/asm-x86_64')
-rw-r--r-- | include/asm-x86_64/kdebug.h | 1 |
1 files changed, 0 insertions, 1 deletions
diff --git a/include/asm-x86_64/kdebug.h b/include/asm-x86_64/kdebug.h index adb6f918d3ad..6277f75cbb4b 100644 --- a/include/asm-x86_64/kdebug.h +++ b/include/asm-x86_64/kdebug.h | |||
@@ -23,7 +23,6 @@ enum die_val { | |||
23 | DIE_OOPS = 1, | 23 | DIE_OOPS = 1, |
24 | DIE_INT3, | 24 | DIE_INT3, |
25 | DIE_DEBUG, | 25 | DIE_DEBUG, |
26 | DIE_DEBUGSTEP, | ||
27 | DIE_PANIC, | 26 | DIE_PANIC, |
28 | DIE_NMI, | 27 | DIE_NMI, |
29 | DIE_DIE, | 28 | DIE_DIE, |