From: Jan Beulich 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 Cc: Arjan van de Ven Signed-off-by: Andrew Morton --- arch/x86_64/kernel/entry.S | 12 +++++------- 1 files changed, 5 insertions(+), 7 deletions(-) diff -puN arch/x86_64/kernel/entry.S~x86_64-fix-page-fault-from-show_trace arch/x86_64/kernel/entry.S --- devel/arch/x86_64/kernel/entry.S~x86_64-fix-page-fault-from-show_trace 2005-11-08 15:47:19.000000000 -0800 +++ devel-akpm/arch/x86_64/kernel/entry.S 2005-11-08 15:47:19.000000000 -0800 @@ -1024,17 +1024,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 _