ARM: entry: no need to increase preempt count for IRQ handlers
irq_enter() and irq_exit() already take care of the preempt_count handling for interrupts, which increment and decrement the hardirq bits of the preempt count. So we can remove the preempt count handing in our IRQ entry/exit assembly, like x86 did some 9 years ago. Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
This commit is contained in:
parent
198a0a927a
commit
1613cc1119
1 changed files with 4 additions and 23 deletions
|
@ -220,16 +220,12 @@ __irq_svc:
|
||||||
#ifdef CONFIG_TRACE_IRQFLAGS
|
#ifdef CONFIG_TRACE_IRQFLAGS
|
||||||
bl trace_hardirqs_off
|
bl trace_hardirqs_off
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
irq_handler
|
||||||
|
|
||||||
#ifdef CONFIG_PREEMPT
|
#ifdef CONFIG_PREEMPT
|
||||||
get_thread_info tsk
|
get_thread_info tsk
|
||||||
ldr r8, [tsk, #TI_PREEMPT] @ get preempt count
|
ldr r8, [tsk, #TI_PREEMPT] @ get preempt count
|
||||||
add r7, r8, #1 @ increment it
|
|
||||||
str r7, [tsk, #TI_PREEMPT]
|
|
||||||
#endif
|
|
||||||
|
|
||||||
irq_handler
|
|
||||||
#ifdef CONFIG_PREEMPT
|
|
||||||
str r8, [tsk, #TI_PREEMPT] @ restore preempt count
|
|
||||||
ldr r0, [tsk, #TI_FLAGS] @ get flags
|
ldr r0, [tsk, #TI_FLAGS] @ get flags
|
||||||
teq r8, #0 @ if preempt count != 0
|
teq r8, #0 @ if preempt count != 0
|
||||||
movne r0, #0 @ force flags to 0
|
movne r0, #0 @ force flags to 0
|
||||||
|
@ -432,23 +428,8 @@ __irq_usr:
|
||||||
bl trace_hardirqs_off
|
bl trace_hardirqs_off
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
get_thread_info tsk
|
|
||||||
#ifdef CONFIG_PREEMPT
|
|
||||||
ldr r8, [tsk, #TI_PREEMPT] @ get preempt count
|
|
||||||
add r7, r8, #1 @ increment it
|
|
||||||
str r7, [tsk, #TI_PREEMPT]
|
|
||||||
#endif
|
|
||||||
|
|
||||||
irq_handler
|
irq_handler
|
||||||
#ifdef CONFIG_PREEMPT
|
get_thread_info tsk
|
||||||
ldr r0, [tsk, #TI_PREEMPT]
|
|
||||||
str r8, [tsk, #TI_PREEMPT]
|
|
||||||
teq r0, r7
|
|
||||||
ARM( strne r0, [r0, -r0] )
|
|
||||||
THUMB( movne r0, #0 )
|
|
||||||
THUMB( strne r0, [r0] )
|
|
||||||
#endif
|
|
||||||
|
|
||||||
mov why, #0
|
mov why, #0
|
||||||
b ret_to_user_from_irq
|
b ret_to_user_from_irq
|
||||||
UNWIND(.fnend )
|
UNWIND(.fnend )
|
||||||
|
|
Loading…
Add table
Reference in a new issue