aboutsummaryrefslogtreecommitdiffstats
path: root/arch/sparc64/kernel/rtrap.S
diff options
context:
space:
mode:
authorDavid S. Miller <davem@davemloft.net>2008-11-26 01:24:59 -0500
committerDavid S. Miller <davem@davemloft.net>2008-12-04 12:17:03 -0500
commit5565736e44fff06dc5f5c6559e04ac58d2d560ab (patch)
tree08fd6982f1659a4a77439aa19498297e226b1b1b /arch/sparc64/kernel/rtrap.S
parentb4f4372f96e0573d752d9e45beda02fabf716cc8 (diff)
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>
Diffstat (limited to 'arch/sparc64/kernel/rtrap.S')
-rw-r--r--arch/sparc64/kernel/rtrap.S14
1 files changed, 13 insertions, 1 deletions
diff --git a/arch/sparc64/kernel/rtrap.S b/arch/sparc64/kernel/rtrap.S
index 6892cf556f45..fd3cee4d117c 100644
--- a/arch/sparc64/kernel/rtrap.S
+++ b/arch/sparc64/kernel/rtrap.S
@@ -132,6 +132,18 @@ __handle_signal:
132 ba,pt %xcc, __handle_signal_continue 132 ba,pt %xcc, __handle_signal_continue
133 andn %l1, %l4, %l1 133 andn %l1, %l4, %l1
134 134
135 /* When returning from a NMI (%pil==15) interrupt we want to
136 * avoid running softirqs, doing IRQ tracing, preempting, etc.
137 */
138 .globl rtrap_nmi
139rtrap_nmi: ldx [%sp + PTREGS_OFF + PT_V9_TSTATE], %l1
140 sethi %hi(0xf << 20), %l4
141 and %l1, %l4, %l4
142 andn %l1, %l4, %l1
143 srl %l4, 20, %l4
144 ba,pt %xcc, rtrap_no_irq_enable
145 wrpr %l4, %pil
146
135 .align 64 147 .align 64
136 .globl rtrap_irq, rtrap, irqsz_patchme, rtrap_xcall 148 .globl rtrap_irq, rtrap, irqsz_patchme, rtrap_xcall
137rtrap_irq: 149rtrap_irq:
@@ -161,8 +173,8 @@ rtrap_xcall:
161 call trace_hardirqs_on 173 call trace_hardirqs_on
162 nop 174 nop
163 wrpr %l4, %pil 175 wrpr %l4, %pil
164rtrap_no_irq_enable:
165#endif 176#endif
177rtrap_no_irq_enable:
166 andcc %l1, TSTATE_PRIV, %l3 178 andcc %l1, TSTATE_PRIV, %l3
167 bne,pn %icc, to_kernel 179 bne,pn %icc, to_kernel
168 nop 180 nop