[PATCH] Don't use kernel_text_address in oops context
authorAndi Kleen <ak@suse.de>
Tue, 26 Sep 2006 08:52:38 +0000 (10:52 +0200)
committerAndi Kleen <andi@basil.nowhere.org>
Tue, 26 Sep 2006 08:52:38 +0000 (10:52 +0200)
Because it can take spinlocks.

Suggested by Mathieu Desnoyers

Cc: Mathieu Desnoyers <compudj@krystal.dyndns.org>
Signed-off-by: Andi Kleen <ak@suse.de>
arch/x86_64/kernel/traps.c

index fb8486eca1b672fd0a7bfc1b379dcd0cfcb4dff1..01f2a8d254c2fd6683b423910b1af36a046add42 100644 (file)
@@ -299,7 +299,9 @@ void dump_trace(struct task_struct *tsk, struct pt_regs *regs, unsigned long * s
 #define HANDLE_STACK(cond) \
        do while (cond) { \
                unsigned long addr = *stack++; \
-               if (kernel_text_address(addr)) { \
+               if (oops_in_progress ?          \
+                       __kernel_text_address(addr) : \
+                       kernel_text_address(addr)) { \
                        /* \
                         * If the address is either in the text segment of the \
                         * kernel, or in the region which contains vmalloc'ed \