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: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
b4f4372f96
commit
5565736e44
@ -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:
|
|||||||
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:
|
|||||||
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
|
||||||
|
Loading…
Reference in New Issue
Block a user