|
@@ -612,6 +612,9 @@ resume_kernel_mode:
|
|
|
|
|
|
#ifdef CONFIG_PREEMPT
|
|
|
|
|
|
+ ; This is a must for preempt_schedule_irq()
|
|
|
+ IRQ_DISABLE r9
|
|
|
+
|
|
|
; Can't preempt if preemption disabled
|
|
|
GET_CURR_THR_INFO_FROM_SP r10
|
|
|
ld r8, [r10, THREAD_INFO_PREEMPT_COUNT]
|
|
@@ -621,8 +624,6 @@ resume_kernel_mode:
|
|
|
ld r9, [r10, THREAD_INFO_FLAGS]
|
|
|
bbit0 r9, TIF_NEED_RESCHED, restore_regs
|
|
|
|
|
|
- IRQ_DISABLE r9
|
|
|
-
|
|
|
; Invoke PREEMPTION
|
|
|
bl preempt_schedule_irq
|
|
|
|
|
@@ -635,12 +636,11 @@ resume_kernel_mode:
|
|
|
;
|
|
|
; Restore the saved sys context (common exit-path for EXCPN/IRQ/Trap)
|
|
|
; IRQ shd definitely not happen between now and rtie
|
|
|
+; All 2 entry points to here already disable interrupts
|
|
|
|
|
|
restore_regs :
|
|
|
|
|
|
- ; Disable Interrupts while restoring reg-file back
|
|
|
- ; XXX can this be optimised out
|
|
|
- IRQ_DISABLE_SAVE r9, r10 ;@r10 has prisitine (pre-disable) copy
|
|
|
+ lr r10, [status32]
|
|
|
|
|
|
; Restore REG File. In case multiple Events outstanding,
|
|
|
; use the same priorty as rtie: EXCPN, L2 IRQ, L1 IRQ, None
|