[PATCH] x86_64: fix page fault from show_trace()
authorJan Beulich <jbeulich@novell.com>
Wed, 11 Jan 2006 21:43:21 +0000 (22:43 +0100)
committerLinus Torvalds <torvalds@g5.osdl.org>
Thu, 12 Jan 2006 03:04:50 +0000 (19:04 -0800)
The introduction of call_softirq switching to the interrupt stack several
releases earlier resulted in a problem with the code in show_trace, which
assumes that it can pick the previous stack pointer from the end of the
interrupt stack.

Cc: Andi Kleen <ak@muc.de>
Cc: Arjan van de Ven <arjanv@redhat.com>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Andi Kleen <ak@suse.de>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
arch/x86_64/kernel/entry.S

index 28b3c8e..45e0ab8 100644 (file)
@@ -1045,17 +1045,15 @@ ENTRY(call_debug)
 ENTRY(call_softirq)
        CFI_STARTPROC
        movq %gs:pda_irqstackptr,%rax
 ENTRY(call_softirq)
        CFI_STARTPROC
        movq %gs:pda_irqstackptr,%rax
-       pushq %r15
-       CFI_ADJUST_CFA_OFFSET 8
-       movq %rsp,%r15
-       CFI_DEF_CFA_REGISTER    r15
+       movq %rsp,%rdx
+       CFI_DEF_CFA_REGISTER    rdx
        incl %gs:pda_irqcount
        cmove %rax,%rsp
        incl %gs:pda_irqcount
        cmove %rax,%rsp
+       pushq %rdx
+       /*todo CFI_DEF_CFA_EXPRESSION ...*/
        call __do_softirq
        call __do_softirq
-       movq %r15,%rsp
+       popq %rsp
        CFI_DEF_CFA_REGISTER    rsp
        decl %gs:pda_irqcount
        CFI_DEF_CFA_REGISTER    rsp
        decl %gs:pda_irqcount
-       popq %r15
-       CFI_ADJUST_CFA_OFFSET -8
        ret
        CFI_ENDPROC
        ret
        CFI_ENDPROC