[<prev] [next>] [day] [month] [year] [list]
Message-ID: <44cece17.kANEA6Z0OVQWh/fc%ak@suse.de>
Date: Tue, 01 Aug 2006 05:44:23 +0200
From: "Andi Kleen" <ak@...e.de>
To: torvalds@...l.org
Cc: linux-kernel@...r.kernel.org, discuss@...-64.org,
jbeulich@...ell.com
Subject: [PATCH] [1/2] x86_64: Fix backtracing for interrupt stacks
Readd backlink for old style unwinder to stack switching.
Add proper stack frame and CFI annotations to call_softirq
This prevents a oops when backtracing with fallback through
the interrupt stack top.
Suggested by Jan Beulich and Herbert Xu wanted it in 2.6.18.
Cc: jbeulich@...ell.com
Signed-off-by: Andi Kleen <ak@...e.de>
---
arch/x86_64/kernel/entry.S | 18 +++++++++++-------
1 files changed, 11 insertions(+), 7 deletions(-)
Index: linux-2.6.18-rc3/arch/x86_64/kernel/entry.S
===================================================================
--- linux-2.6.18-rc3.orig/arch/x86_64/kernel/entry.S
+++ linux-2.6.18-rc3/arch/x86_64/kernel/entry.S
@@ -513,6 +513,7 @@ END(stub_rt_sigreturn)
swapgs
1: incl %gs:pda_irqcount # RED-PEN should check preempt count
cmoveq %gs:pda_irqstackptr,%rsp
+ push %rbp # backlink for old unwinder
/*
* We entered an interrupt context - irqs are off:
*/
@@ -1139,18 +1140,21 @@ ENTRY(machine_check)
END(machine_check)
#endif
+/* Call softirq on interrupt stack. Interrupts are off. */
ENTRY(call_softirq)
CFI_STARTPROC
- movq %gs:pda_irqstackptr,%rax
- movq %rsp,%rdx
- CFI_DEF_CFA_REGISTER rdx
+ push %rbp
+ CFI_ADJUST_CFA_OFFSET 8
+ CFI_REL_OFFSET rbp,0
+ mov %rsp,%rbp
+ CFI_DEF_CFA_REGISTER rbp
incl %gs:pda_irqcount
- cmove %rax,%rsp
- pushq %rdx
- /*todo CFI_DEF_CFA_EXPRESSION ...*/
+ cmove %gs:pda_irqstackptr,%rsp
+ push %rbp # backlink for old unwinder
call __do_softirq
- popq %rsp
+ leaveq
CFI_DEF_CFA_REGISTER rsp
+ CFI_ADJUST_CFA_OFFSET -8
decl %gs:pda_irqcount
ret
CFI_ENDPROC
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists