[PATCH] x86_64: fix page fault from show_trace()

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>
This commit is contained in:
Jan Beulich 2006-01-11 22:43:21 +01:00 committed by Linus Torvalds
parent 4724e3e86d
commit bd9cb64df1

View File

@ -1045,17 +1045,15 @@ ENTRY(call_debug)
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
pushq %rdx
/*todo CFI_DEF_CFA_EXPRESSION ...*/
call __do_softirq
movq %r15,%rsp
popq %rsp
CFI_DEF_CFA_REGISTER rsp
decl %gs:pda_irqcount
popq %r15
CFI_ADJUST_CFA_OFFSET -8
ret
CFI_ENDPROC