aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--arch/arm/kernel/entry-armv.S18
-rw-r--r--arch/arm/kernel/entry-header.S6
2 files changed, 6 insertions, 18 deletions
diff --git a/arch/arm/kernel/entry-armv.S b/arch/arm/kernel/entry-armv.S
index 68e41defef9d..9f6a30798b6b 100644
--- a/arch/arm/kernel/entry-armv.S
+++ b/arch/arm/kernel/entry-armv.S
@@ -192,11 +192,6 @@ __dabt_svc:
192 svc_entry 192 svc_entry
193 mov r2, sp 193 mov r2, sp
194 dabt_helper 194 dabt_helper
195
196 @
197 @ IRQs off again before pulling preserved data off the stack
198 @
199 disable_irq_notrace
200 svc_exit r5 @ return from exception 195 svc_exit r5 @ return from exception
201 UNWIND(.fnend ) 196 UNWIND(.fnend )
202ENDPROC(__dabt_svc) 197ENDPROC(__dabt_svc)
@@ -283,15 +278,7 @@ __und_svc_fault:
283 mov r0, sp @ struct pt_regs *regs 278 mov r0, sp @ struct pt_regs *regs
284 bl __und_fault 279 bl __und_fault
285 280
286 @
287 @ IRQs off again before pulling preserved data off the stack
288 @
289__und_svc_finish: 281__und_svc_finish:
290 disable_irq_notrace
291
292 @
293 @ restore SPSR and restart the instruction
294 @
295 ldr r5, [sp, #S_PSR] @ Get SVC cpsr 282 ldr r5, [sp, #S_PSR] @ Get SVC cpsr
296 svc_exit r5 @ return from exception 283 svc_exit r5 @ return from exception
297 UNWIND(.fnend ) 284 UNWIND(.fnend )
@@ -302,11 +289,6 @@ __pabt_svc:
302 svc_entry 289 svc_entry
303 mov r2, sp @ regs 290 mov r2, sp @ regs
304 pabt_helper 291 pabt_helper
305
306 @
307 @ IRQs off again before pulling preserved data off the stack
308 @
309 disable_irq_notrace
310 svc_exit r5 @ return from exception 292 svc_exit r5 @ return from exception
311 UNWIND(.fnend ) 293 UNWIND(.fnend )
312ENDPROC(__pabt_svc) 294ENDPROC(__pabt_svc)
diff --git a/arch/arm/kernel/entry-header.S b/arch/arm/kernel/entry-header.S
index 0bf15e5c40a2..57a1631f065a 100644
--- a/arch/arm/kernel/entry-header.S
+++ b/arch/arm/kernel/entry-header.S
@@ -76,12 +76,15 @@
76#ifndef CONFIG_THUMB2_KERNEL 76#ifndef CONFIG_THUMB2_KERNEL
77 .macro svc_exit, rpsr, irq = 0 77 .macro svc_exit, rpsr, irq = 0
78 .if \irq != 0 78 .if \irq != 0
79 @ IRQs already off
79#ifdef CONFIG_TRACE_IRQFLAGS 80#ifdef CONFIG_TRACE_IRQFLAGS
80 @ The parent context IRQs must have been enabled to get here in 81 @ The parent context IRQs must have been enabled to get here in
81 @ the first place, so there's no point checking the PSR I bit. 82 @ the first place, so there's no point checking the PSR I bit.
82 bl trace_hardirqs_on 83 bl trace_hardirqs_on
83#endif 84#endif
84 .else 85 .else
86 @ IRQs off again before pulling preserved data off the stack
87 disable_irq_notrace
85#ifdef CONFIG_TRACE_IRQFLAGS 88#ifdef CONFIG_TRACE_IRQFLAGS
86 tst \rpsr, #PSR_I_BIT 89 tst \rpsr, #PSR_I_BIT
87 bleq trace_hardirqs_on 90 bleq trace_hardirqs_on
@@ -136,12 +139,15 @@
136#else /* CONFIG_THUMB2_KERNEL */ 139#else /* CONFIG_THUMB2_KERNEL */
137 .macro svc_exit, rpsr, irq = 0 140 .macro svc_exit, rpsr, irq = 0
138 .if \irq != 0 141 .if \irq != 0
142 @ IRQs already off
139#ifdef CONFIG_TRACE_IRQFLAGS 143#ifdef CONFIG_TRACE_IRQFLAGS
140 @ The parent context IRQs must have been enabled to get here in 144 @ The parent context IRQs must have been enabled to get here in
141 @ the first place, so there's no point checking the PSR I bit. 145 @ the first place, so there's no point checking the PSR I bit.
142 bl trace_hardirqs_on 146 bl trace_hardirqs_on
143#endif 147#endif
144 .else 148 .else
149 @ IRQs off again before pulling preserved data off the stack
150 disable_irq_notrace
145#ifdef CONFIG_TRACE_IRQFLAGS 151#ifdef CONFIG_TRACE_IRQFLAGS
146 tst \rpsr, #PSR_I_BIT 152 tst \rpsr, #PSR_I_BIT
147 bleq trace_hardirqs_on 153 bleq trace_hardirqs_on