diff options
Diffstat (limited to 'arch/arc/kernel/entry.S')
-rw-r--r-- | arch/arc/kernel/entry.S | 10 |
1 files changed, 5 insertions, 5 deletions
diff --git a/arch/arc/kernel/entry.S b/arch/arc/kernel/entry.S index 059ca94e3df8..b908dde8a331 100644 --- a/arch/arc/kernel/entry.S +++ b/arch/arc/kernel/entry.S | |||
@@ -612,6 +612,9 @@ resume_kernel_mode: | |||
612 | 612 | ||
613 | #ifdef CONFIG_PREEMPT | 613 | #ifdef CONFIG_PREEMPT |
614 | 614 | ||
615 | ; This is a must for preempt_schedule_irq() | ||
616 | IRQ_DISABLE r9 | ||
617 | |||
615 | ; Can't preempt if preemption disabled | 618 | ; Can't preempt if preemption disabled |
616 | GET_CURR_THR_INFO_FROM_SP r10 | 619 | GET_CURR_THR_INFO_FROM_SP r10 |
617 | ld r8, [r10, THREAD_INFO_PREEMPT_COUNT] | 620 | ld r8, [r10, THREAD_INFO_PREEMPT_COUNT] |
@@ -621,8 +624,6 @@ resume_kernel_mode: | |||
621 | ld r9, [r10, THREAD_INFO_FLAGS] | 624 | ld r9, [r10, THREAD_INFO_FLAGS] |
622 | bbit0 r9, TIF_NEED_RESCHED, restore_regs | 625 | bbit0 r9, TIF_NEED_RESCHED, restore_regs |
623 | 626 | ||
624 | IRQ_DISABLE r9 | ||
625 | |||
626 | ; Invoke PREEMPTION | 627 | ; Invoke PREEMPTION |
627 | bl preempt_schedule_irq | 628 | bl preempt_schedule_irq |
628 | 629 | ||
@@ -635,12 +636,11 @@ resume_kernel_mode: | |||
635 | ; | 636 | ; |
636 | ; Restore the saved sys context (common exit-path for EXCPN/IRQ/Trap) | 637 | ; Restore the saved sys context (common exit-path for EXCPN/IRQ/Trap) |
637 | ; IRQ shd definitely not happen between now and rtie | 638 | ; IRQ shd definitely not happen between now and rtie |
639 | ; All 2 entry points to here already disable interrupts | ||
638 | 640 | ||
639 | restore_regs : | 641 | restore_regs : |
640 | 642 | ||
641 | ; Disable Interrupts while restoring reg-file back | 643 | lr r10, [status32] |
642 | ; XXX can this be optimised out | ||
643 | IRQ_DISABLE_SAVE r9, r10 ;@r10 has prisitine (pre-disable) copy | ||
644 | 644 | ||
645 | ; Restore REG File. In case multiple Events outstanding, | 645 | ; Restore REG File. In case multiple Events outstanding, |
646 | ; use the same priorty as rtie: EXCPN, L2 IRQ, L1 IRQ, None | 646 | ; use the same priorty as rtie: EXCPN, L2 IRQ, L1 IRQ, None |