3.8.13.14 -stable review patch.  If anyone has any objections, please let me 
know.

------------------

From: Russell King <[email protected]>

commit f8f02ec25ce3eafb049feeb3abf34fcd6e338241 upstream.

All svc exit paths need IRQs off.  Rather than placing this before
every user of svc_exit, combine it into this macro.

Signed-off-by: Russell King <[email protected]>
[ kamal: 3.8 stable prereq for
  e16b31b ARM: 7876/1: clear Thumb-2 IT state on exception handling ]
Signed-off-by: Kamal Mostafa <[email protected]>
---
 arch/arm/kernel/entry-armv.S   | 18 ------------------
 arch/arm/kernel/entry-header.S |  6 ++++++
 2 files changed, 6 insertions(+), 18 deletions(-)

diff --git a/arch/arm/kernel/entry-armv.S b/arch/arm/kernel/entry-armv.S
index a716ea9..a7de792 100644
--- a/arch/arm/kernel/entry-armv.S
+++ b/arch/arm/kernel/entry-armv.S
@@ -192,11 +192,6 @@ __dabt_svc:
        svc_entry
        mov     r2, sp
        dabt_helper
-
-       @
-       @ IRQs off again before pulling preserved data off the stack
-       @
-       disable_irq_notrace
        svc_exit r5                             @ return from exception
  UNWIND(.fnend         )
 ENDPROC(__dabt_svc)
@@ -283,15 +278,7 @@ __und_svc_fault:
        mov     r0, sp                          @ struct pt_regs *regs
        bl      __und_fault
 
-       @
-       @ IRQs off again before pulling preserved data off the stack
-       @
 __und_svc_finish:
-       disable_irq_notrace
-
-       @
-       @ restore SPSR and restart the instruction
-       @
        ldr     r5, [sp, #S_PSR]                @ Get SVC cpsr
        svc_exit r5                             @ return from exception
  UNWIND(.fnend         )
@@ -302,11 +289,6 @@ __pabt_svc:
        svc_entry
        mov     r2, sp                          @ regs
        pabt_helper
-
-       @
-       @ IRQs off again before pulling preserved data off the stack
-       @
-       disable_irq_notrace
        svc_exit r5                             @ return from exception
  UNWIND(.fnend         )
 ENDPROC(__pabt_svc)
diff --git a/arch/arm/kernel/entry-header.S b/arch/arm/kernel/entry-header.S
index 0bf15e5..57a1631 100644
--- a/arch/arm/kernel/entry-header.S
+++ b/arch/arm/kernel/entry-header.S
@@ -76,12 +76,15 @@
 #ifndef CONFIG_THUMB2_KERNEL
        .macro  svc_exit, rpsr, irq = 0
        .if     \irq != 0
+       @ IRQs already off
 #ifdef CONFIG_TRACE_IRQFLAGS
        @ The parent context IRQs must have been enabled to get here in
        @ the first place, so there's no point checking the PSR I bit.
        bl      trace_hardirqs_on
 #endif
        .else
+       @ IRQs off again before pulling preserved data off the stack
+       disable_irq_notrace
 #ifdef CONFIG_TRACE_IRQFLAGS
        tst     \rpsr, #PSR_I_BIT
        bleq    trace_hardirqs_on
@@ -136,12 +139,15 @@
 #else  /* CONFIG_THUMB2_KERNEL */
        .macro  svc_exit, rpsr, irq = 0
        .if     \irq != 0
+       @ IRQs already off
 #ifdef CONFIG_TRACE_IRQFLAGS
        @ The parent context IRQs must have been enabled to get here in
        @ the first place, so there's no point checking the PSR I bit.
        bl      trace_hardirqs_on
 #endif
        .else
+       @ IRQs off again before pulling preserved data off the stack
+       disable_irq_notrace
 #ifdef CONFIG_TRACE_IRQFLAGS
        tst     \rpsr, #PSR_I_BIT
        bleq    trace_hardirqs_on
-- 
1.8.3.2

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to