Commit fce16bc35ae4a45634f3dc348d8d297a25c277cf
1 parent
37f3ac498c
Exists in
smarc-imx_3.14.28_1.0.0_ga
and in
1 other branch
ARC: Entry Handler tweaks: Optimize away redundant IRQ_DISABLE_SAVE
In the exception return path, for both U/K cases, intr are already disabled (for various existing reasons). So when we drop down to @restore_regs, we need not redo that. There was subtle issue - when intr were NOT being disabled for ret-to-kernel-but-no-preemption case - now fixed by moving the IRQ_DISABLE further up in @resume_kernel_mode. So what do we gain: * Shaves off a few insn in return path. * Eliminates the need for IRQ_DISABLE_SAVE assembler macro for ARCv2 hence allows for entry code sharing. Signed-off-by: Vineet Gupta <vgupta@synopsys.com>
Showing 2 changed files with 5 additions and 12 deletions Side-by-side Diff
arch/arc/include/asm/irqflags.h
... | ... | @@ -157,13 +157,6 @@ |
157 | 157 | flag \scratch |
158 | 158 | .endm |
159 | 159 | |
160 | -.macro IRQ_DISABLE_SAVE scratch, save | |
161 | - lr \scratch, [status32] | |
162 | - mov \save, \scratch /* Make a copy */ | |
163 | - bic \scratch, \scratch, (STATUS_E1_MASK | STATUS_E2_MASK) | |
164 | - flag \scratch | |
165 | -.endm | |
166 | - | |
167 | 160 | .macro IRQ_ENABLE scratch |
168 | 161 | lr \scratch, [status32] |
169 | 162 | or \scratch, \scratch, (STATUS_E1_MASK | STATUS_E2_MASK) |
arch/arc/kernel/entry.S
... | ... | @@ -612,6 +612,9 @@ |
612 | 612 | |
613 | 613 | #ifdef CONFIG_PREEMPT |
614 | 614 | |
615 | + ; This is a must for preempt_schedule_irq() | |
616 | + IRQ_DISABLE r9 | |
617 | + | |
615 | 618 | ; Can't preempt if preemption disabled |
616 | 619 | GET_CURR_THR_INFO_FROM_SP r10 |
617 | 620 | ld r8, [r10, THREAD_INFO_PREEMPT_COUNT] |
... | ... | @@ -621,8 +624,6 @@ |
621 | 624 | ld r9, [r10, THREAD_INFO_FLAGS] |
622 | 625 | bbit0 r9, TIF_NEED_RESCHED, restore_regs |
623 | 626 | |
624 | - IRQ_DISABLE r9 | |
625 | - | |
626 | 627 | ; Invoke PREEMPTION |
627 | 628 | bl preempt_schedule_irq |
628 | 629 | |
629 | 630 | |
... | ... | @@ -635,12 +636,11 @@ |
635 | 636 | ; |
636 | 637 | ; Restore the saved sys context (common exit-path for EXCPN/IRQ/Trap) |
637 | 638 | ; IRQ shd definitely not happen between now and rtie |
639 | +; All 2 entry points to here already disable interrupts | |
638 | 640 | |
639 | 641 | restore_regs : |
640 | 642 | |
641 | - ; Disable Interrupts while restoring reg-file back | |
642 | - ; XXX can this be optimised out | |
643 | - IRQ_DISABLE_SAVE r9, r10 ;@r10 has prisitine (pre-disable) copy | |
643 | + lr r10, [status32] | |
644 | 644 | |
645 | 645 | ; Restore REG File. In case multiple Events outstanding, |
646 | 646 | ; use the same priorty as rtie: EXCPN, L2 IRQ, L1 IRQ, None |