mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-15 08:14:15 +08:00
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; \
|
||||
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)
|
||||
|
||||
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user