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

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
...@@ -162,7 +162,7 @@ ...@@ -162,7 +162,7 @@
mov level, %o0; \ mov level, %o0; \
call routine; \ call routine; \
add %sp, PTREGS_OFF, %o1; \ add %sp, PTREGS_OFF, %o1; \
ba,a,pt %xcc, rtrap_irq; ba,a,pt %xcc, rtrap_nmi;
#define TRAP_IVEC TRAP_NOSAVE(do_ivec) #define TRAP_IVEC TRAP_NOSAVE(do_ivec)
......
...@@ -132,6 +132,18 @@ __handle_signal: ...@@ -132,6 +132,18 @@ __handle_signal:
ba,pt %xcc, __handle_signal_continue ba,pt %xcc, __handle_signal_continue
andn %l1, %l4, %l1 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 .align 64
.globl rtrap_irq, rtrap, irqsz_patchme, rtrap_xcall .globl rtrap_irq, rtrap, irqsz_patchme, rtrap_xcall
rtrap_irq: rtrap_irq:
...@@ -161,8 +173,8 @@ rtrap_xcall: ...@@ -161,8 +173,8 @@ rtrap_xcall:
call trace_hardirqs_on call trace_hardirqs_on
nop nop
wrpr %l4, %pil wrpr %l4, %pil
rtrap_no_irq_enable:
#endif #endif
rtrap_no_irq_enable:
andcc %l1, TSTATE_PRIV, %l3 andcc %l1, TSTATE_PRIV, %l3
bne,pn %icc, to_kernel bne,pn %icc, to_kernel
nop nop
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment