diff options
author | Jan Beulich <jbeulich@novell.com> | 2006-01-11 16:43:21 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@g5.osdl.org> | 2006-01-11 22:04:50 -0500 |
commit | bd9cb64df1d99c07ea9672661ede6ca3ba5c6579 (patch) | |
tree | 6f9e9e81aad3f554b5ca1e8cae1ad7c3b9676bbf | |
parent | 4724e3e86d806860c90917f9b73d4354e388b39b (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>
-rw-r--r-- | arch/x86_64/kernel/entry.S | 12 |
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) | |||
1045 | ENTRY(call_softirq) | 1045 | ENTRY(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 |