|
@@ -220,16 +220,12 @@ __irq_svc:
|
|
|
#ifdef CONFIG_TRACE_IRQFLAGS
|
|
|
bl trace_hardirqs_off
|
|
|
#endif
|
|
|
-#ifdef CONFIG_PREEMPT
|
|
|
- get_thread_info tsk
|
|
|
- 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
|
|
|
+ get_thread_info tsk
|
|
|
+ ldr r8, [tsk, #TI_PREEMPT] @ get preempt count
|
|
|
ldr r0, [tsk, #TI_FLAGS] @ get flags
|
|
|
teq r8, #0 @ if preempt count != 0
|
|
|
movne r0, #0 @ force flags to 0
|
|
@@ -432,23 +428,8 @@ __irq_usr:
|
|
|
bl trace_hardirqs_off
|
|
|
#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
|
|
|
-#ifdef CONFIG_PREEMPT
|
|
|
- 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
|
|
|
-
|
|
|
+ get_thread_info tsk
|
|
|
mov why, #0
|
|
|
b ret_to_user_from_irq
|
|
|
UNWIND(.fnend )
|