aboutsummaryrefslogtreecommitdiffstats
path: root/arch/x86_64/kernel/entry.S
diff options
context:
space:
mode:
authorJan Beulich <jbeulich@novell.com>2006-01-11 16:43:21 -0500
committerLinus Torvalds <torvalds@g5.osdl.org>2006-01-11 22:04:50 -0500
commitbd9cb64df1d99c07ea9672661ede6ca3ba5c6579 (patch)
tree6f9e9e81aad3f554b5ca1e8cae1ad7c3b9676bbf /arch/x86_64/kernel/entry.S
parent4724e3e86d806860c90917f9b73d4354e388b39b (diff)
[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>
Diffstat (limited to 'arch/x86_64/kernel/entry.S')
-rw-r--r--arch/x86_64/kernel/entry.S12
1 files changed, 5 insertions, 7 deletions
diff --git a/arch/x86_64/kernel/entry.S b/arch/x86_64/kernel/entry.S
index 28b3c8e6b044..45e0ab8a1fca 100644
--- a/arch/x86_64/kernel/entry.S
+++ b/arch/x86_64/kernel/entry.S
@@ -1045,17 +1045,15 @@ ENTRY(call_debug)
1045ENTRY(call_softirq) 1045ENTRY(call_softirq)
1046 CFI_STARTPROC 1046 CFI_STARTPROC
1047 movq %gs:pda_irqstackptr,%rax 1047 movq %gs:pda_irqstackptr,%rax
1048 pushq %r15 1048 movq %rsp,%rdx
1049 CFI_ADJUST_CFA_OFFSET 8 1049 CFI_DEF_CFA_REGISTER rdx
1050 movq %rsp,%r15
1051 CFI_DEF_CFA_REGISTER r15
1052 incl %gs:pda_irqcount 1050 incl %gs:pda_irqcount
1053 cmove %rax,%rsp 1051 cmove %rax,%rsp
1052 pushq %rdx
1053 /*todo CFI_DEF_CFA_EXPRESSION ...*/
1054 call __do_softirq 1054 call __do_softirq
1055 movq %r15,%rsp 1055 popq %rsp
1056 CFI_DEF_CFA_REGISTER rsp 1056 CFI_DEF_CFA_REGISTER rsp
1057 decl %gs:pda_irqcount 1057 decl %gs:pda_irqcount
1058 popq %r15
1059 CFI_ADJUST_CFA_OFFSET -8
1060 ret 1058 ret
1061 CFI_ENDPROC 1059 CFI_ENDPROC