diff options
author | Jan Beulich <jbeulich@novell.com> | 2006-01-11 22:43:21 +0100 |
---|---|---|
committer | Linus Torvalds <torvalds@g5.osdl.org> | 2006-01-11 19:04:50 -0800 |
commit | bd9cb64df1d99c07ea9672661ede6ca3ba5c6579 (patch) | |
tree | 6f9e9e81aad3f554b5ca1e8cae1ad7c3b9676bbf /arch/x86_64/kernel/entry.S | |
parent | 4724e3e86d806860c90917f9b73d4354e388b39b (diff) | |
download | talos-op-linux-bd9cb64df1d99c07ea9672661ede6ca3ba5c6579.tar.gz talos-op-linux-bd9cb64df1d99c07ea9672661ede6ca3ba5c6579.zip |
[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.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 |