diff options
author | Russell King <rmk+kernel@arm.linux.org.uk> | 2013-03-28 14:36:05 +0000 |
---|---|---|
committer | Russell King <rmk+kernel@arm.linux.org.uk> | 2013-04-03 16:50:23 +0100 |
commit | f8f02ec25ce3eafb049feeb3abf34fcd6e338241 (patch) | |
tree | ebaebfd89c34d48081f2de60932f5ee418f1358a /arch/arm/kernel/entry-header.S | |
parent | 9b56febea22003c424f11248908b534eba0f1eeb (diff) | |
download | lwn-f8f02ec25ce3eafb049feeb3abf34fcd6e338241.tar.gz lwn-f8f02ec25ce3eafb049feeb3abf34fcd6e338241.zip |
ARM: entry: move disable_irq_notrace into svc_exit
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 <rmk+kernel@arm.linux.org.uk>
Diffstat (limited to 'arch/arm/kernel/entry-header.S')
-rw-r--r-- | arch/arm/kernel/entry-header.S | 6 |
1 files changed, 6 insertions, 0 deletions
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 @@ #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 |