diff options
author | David S. Miller <davem@davemloft.net> | 2008-11-24 00:55:29 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2008-12-04 12:17:02 -0500 |
commit | b4f4372f96e0573d752d9e45beda02fabf716cc8 (patch) | |
tree | 641798dfe78c1407908c68b64427cd55cdc18b34 /arch/sparc/include/asm/ttable.h | |
parent | c6afec5e4d323e7b88a7d6e291a5aa021a8fcb7d (diff) |
sparc64: Make %pil level 15 a pseudo-NMI.
So that we can profile code even in a local_irq_disable() section,
only write 14 (instead of 15) into the %pil register to disable IRQs.
This allows PIL level 15 to serve as a pseudo NMI.
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'arch/sparc/include/asm/ttable.h')
-rw-r--r-- | arch/sparc/include/asm/ttable.h | 15 |
1 files changed, 13 insertions, 2 deletions
diff --git a/arch/sparc/include/asm/ttable.h b/arch/sparc/include/asm/ttable.h index 5708ba2719fb..bb2c0770a6ac 100644 --- a/arch/sparc/include/asm/ttable.h +++ b/arch/sparc/include/asm/ttable.h | |||
@@ -2,6 +2,7 @@ | |||
2 | #define _SPARC64_TTABLE_H | 2 | #define _SPARC64_TTABLE_H |
3 | 3 | ||
4 | #include <asm/utrap.h> | 4 | #include <asm/utrap.h> |
5 | #include <asm/pil.h> | ||
5 | 6 | ||
6 | #ifdef __ASSEMBLY__ | 7 | #ifdef __ASSEMBLY__ |
7 | #include <asm/thread_info.h> | 8 | #include <asm/thread_info.h> |
@@ -123,7 +124,7 @@ | |||
123 | 124 | ||
124 | #define TRAP_IRQ(routine, level) \ | 125 | #define TRAP_IRQ(routine, level) \ |
125 | rdpr %pil, %g2; \ | 126 | rdpr %pil, %g2; \ |
126 | wrpr %g0, 15, %pil; \ | 127 | wrpr %g0, PIL_NORMAL_MAX, %pil; \ |
127 | sethi %hi(1f-4), %g7; \ | 128 | sethi %hi(1f-4), %g7; \ |
128 | ba,pt %xcc, etrap_irq; \ | 129 | ba,pt %xcc, etrap_irq; \ |
129 | or %g7, %lo(1f-4), %g7; \ | 130 | or %g7, %lo(1f-4), %g7; \ |
@@ -143,7 +144,7 @@ | |||
143 | 144 | ||
144 | #define TRAP_IRQ(routine, level) \ | 145 | #define TRAP_IRQ(routine, level) \ |
145 | rdpr %pil, %g2; \ | 146 | rdpr %pil, %g2; \ |
146 | wrpr %g0, 15, %pil; \ | 147 | wrpr %g0, PIL_NORMAL_MAX, %pil; \ |
147 | ba,pt %xcc, etrap_irq; \ | 148 | ba,pt %xcc, etrap_irq; \ |
148 | rd %pc, %g7; \ | 149 | rd %pc, %g7; \ |
149 | mov level, %o0; \ | 150 | mov level, %o0; \ |
@@ -153,6 +154,16 @@ | |||
153 | 154 | ||
154 | #endif | 155 | #endif |
155 | 156 | ||
157 | #define TRAP_NMI_IRQ(routine, level) \ | ||
158 | rdpr %pil, %g2; \ | ||
159 | wrpr %g0, PIL_NMI, %pil; \ | ||
160 | ba,pt %xcc, etrap_irq; \ | ||
161 | rd %pc, %g7; \ | ||
162 | mov level, %o0; \ | ||
163 | call routine; \ | ||
164 | add %sp, PTREGS_OFF, %o1; \ | ||
165 | ba,a,pt %xcc, rtrap_irq; | ||
166 | |||
156 | #define TRAP_IVEC TRAP_NOSAVE(do_ivec) | 167 | #define TRAP_IVEC TRAP_NOSAVE(do_ivec) |
157 | 168 | ||
158 | #define BTRAP(lvl) TRAP_ARG(bad_trap, lvl) | 169 | #define BTRAP(lvl) TRAP_ARG(bad_trap, lvl) |