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>
 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