Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 2699500b authored by Andi Kleen's avatar Andi Kleen Committed by Linus Torvalds
Browse files

[PATCH] x86_64: Fix backtracing for interrupt stacks



Re-add 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@novell.com
Signed-off-by: default avatarAndi Kleen <ak@suse.de>
Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent ae74c3b6
Loading
Loading
Loading
Loading
+11 −7
Original line number Diff line number Diff line
@@ -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