diff options
| author | Jan Beulich <jbeulich@novell.com> | 2006-01-12 00:43:21 +0300 |
|---|---|---|
| committer | Linus Torvalds <torvalds@g5.osdl.org> | 2006-01-12 06:04:50 +0300 |
| commit | bd9cb64df1d99c07ea9672661ede6ca3ba5c6579 (patch) | |
| tree | 6f9e9e81aad3f554b5ca1e8cae1ad7c3b9676bbf | |
| parent | 4724e3e86d806860c90917f9b73d4354e388b39b (diff) | |
| download | linux-bd9cb64df1d99c07ea9672661ede6ca3ba5c6579.tar.xz | |
[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) 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 |
