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

Commit 5565736e authored by David S. Miller's avatar David S. Miller
Browse files

sparc64: Make special trap return path for TRAP_NMI().



We don't want the rtrap path to try and run softirqs or
anything like that when returning from a PIL==15 NMI.

Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent b4f4372f
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -162,7 +162,7 @@
	mov	level, %o0;				\
	call	routine;				\
	 add	%sp, PTREGS_OFF, %o1;			\
	ba,a,pt	%xcc, rtrap_irq;
	ba,a,pt	%xcc, rtrap_nmi;

#define TRAP_IVEC TRAP_NOSAVE(do_ivec)

+13 −1
Original line number Diff line number Diff line
@@ -132,6 +132,18 @@ __handle_signal:
		ba,pt			%xcc, __handle_signal_continue
		 andn			%l1, %l4, %l1

		/* When returning from a NMI (%pil==15) interrupt we want to
		 * avoid running softirqs, doing IRQ tracing, preempting, etc.
		 */
		.globl			rtrap_nmi
rtrap_nmi:	ldx			[%sp + PTREGS_OFF + PT_V9_TSTATE], %l1
		sethi			%hi(0xf << 20), %l4
		and			%l1, %l4, %l4
		andn			%l1, %l4, %l1
		srl			%l4, 20, %l4
		ba,pt			%xcc, rtrap_no_irq_enable
		 wrpr			%l4, %pil

		.align			64
		.globl			rtrap_irq, rtrap, irqsz_patchme, rtrap_xcall
rtrap_irq:
@@ -161,8 +173,8 @@ rtrap_xcall:
		call			trace_hardirqs_on
		 nop
		wrpr			%l4, %pil
rtrap_no_irq_enable:
#endif
rtrap_no_irq_enable:
		andcc			%l1, TSTATE_PRIV, %l3
		bne,pn			%icc, to_kernel
		 nop