aboutsummaryrefslogtreecommitdiffstats
path: root/arch/sparc/kernel
diff options
context:
space:
mode:
authorDavid S. Miller <davem@davemloft.net>2010-04-20 03:48:37 -0400
committerGreg Kroah-Hartman <gregkh@suse.de>2010-05-12 18:03:03 -0400
commit632b87bf40eefba3fccfdeeca550540eb9c78345 (patch)
tree43074c13c2a5a9c3e92d2700266394b0fd258013 /arch/sparc/kernel
parente460d8d05b193b8f51af1220cf60963a53d9c5a9 (diff)
sparc64: Fix hardirq tracing in trap return path.
[ Upstream commit 28a1f533ae8606020238b840b82ae70a3f87609e ] We can overflow the hardirq stack if we set the %pil here so early, just let the normal control flow do it. This is fine as we are allowed to do the actual IRQ enable at any point after we call trace_hardirqs_on. Signed-off-by: David S. Miller <davem@davemloft.net> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Diffstat (limited to 'arch/sparc/kernel')
-rw-r--r--arch/sparc/kernel/rtrap_64.S12
1 files changed, 11 insertions, 1 deletions
diff --git a/arch/sparc/kernel/rtrap_64.S b/arch/sparc/kernel/rtrap_64.S
index fd3cee4d117c..c720f0ccea1b 100644
--- a/arch/sparc/kernel/rtrap_64.S
+++ b/arch/sparc/kernel/rtrap_64.S
@@ -172,7 +172,17 @@ rtrap_xcall:
172 nop 172 nop
173 call trace_hardirqs_on 173 call trace_hardirqs_on
174 nop 174 nop
175 wrpr %l4, %pil 175 /* Do not actually set the %pil here. We will do that
176 * below after we clear PSTATE_IE in the %pstate register.
177 * If we re-enable interrupts here, we can recurse down
178 * the hardirq stack potentially endlessly, causing a
179 * stack overflow.
180 *
181 * It is tempting to put this test and trace_hardirqs_on
182 * call at the 'rt_continue' label, but that will not work
183 * as that path hits unconditionally and we do not want to
184 * execute this in NMI return paths, for example.
185 */
176#endif 186#endif
177rtrap_no_irq_enable: 187rtrap_no_irq_enable:
178 andcc %l1, TSTATE_PRIV, %l3 188 andcc %l1, TSTATE_PRIV, %l3