powerpc/32s: Move KUEP locking/unlocking in C
This can be done in C, do it. Unrolling the loop gains approx. 15% performance. From now on, prepare_transfer_to_handler() is only for interrupts from kernel. Signed-off-by: Christophe Leroy <christophe.leroy@csgroup.eu> Signed-off-by: Michael Ellerman <mpe@ellerman.id.au> Link: https://lore.kernel.org/r/4eadd873927e9a73c3d1dfe2f9497353465514cf.1615552867.git.christophe.leroy@csgroup.eu
This commit is contained in:
parent
a2b3e09ae4
commit
b5efec00b6
9 changed files with 64 additions and 48 deletions
|
|
@ -51,16 +51,9 @@
|
|||
#if defined(CONFIG_PPC_BOOK3S_32) || defined(CONFIG_E500)
|
||||
.globl prepare_transfer_to_handler
|
||||
prepare_transfer_to_handler:
|
||||
andi. r12,r9,MSR_PR
|
||||
addi r12,r2,THREAD
|
||||
beq 2f
|
||||
#ifdef CONFIG_PPC_BOOK3S_32
|
||||
kuep_lock r11, r12
|
||||
#endif
|
||||
blr
|
||||
|
||||
/* if from kernel, check interrupted DOZE/NAP mode */
|
||||
2:
|
||||
kuap_save_and_lock r11, r12, r9, r5, r6
|
||||
lwz r12,TI_LOCAL_FLAGS(r2)
|
||||
mtcrf 0x01,r12
|
||||
|
|
@ -86,9 +79,6 @@ _ASM_NOKPROBE_SYMBOL(prepare_transfer_to_handler)
|
|||
.globl transfer_to_syscall
|
||||
transfer_to_syscall:
|
||||
SAVE_NVGPRS(r1)
|
||||
#ifdef CONFIG_PPC_BOOK3S_32
|
||||
kuep_lock r11, r12
|
||||
#endif
|
||||
|
||||
/* Calling convention has r9 = orig r0, r10 = regs */
|
||||
addi r10,r1,STACK_FRAME_OVERHEAD
|
||||
|
|
@ -105,9 +95,6 @@ ret_from_syscall:
|
|||
cmplwi cr0,r5,0
|
||||
bne- 2f
|
||||
#endif /* CONFIG_PPC_47x */
|
||||
#ifdef CONFIG_PPC_BOOK3S_32
|
||||
kuep_unlock r5, r7
|
||||
#endif
|
||||
kuap_check r2, r4
|
||||
lwz r4,_LINK(r1)
|
||||
lwz r5,_CCR(r1)
|
||||
|
|
@ -311,9 +298,6 @@ interrupt_return:
|
|||
bne- .Lrestore_nvgprs
|
||||
|
||||
.Lfast_user_interrupt_return:
|
||||
#ifdef CONFIG_PPC_BOOK3S_32
|
||||
kuep_unlock r10, r11
|
||||
#endif
|
||||
kuap_check r2, r4
|
||||
lwz r11,_NIP(r1)
|
||||
lwz r12,_MSR(r1)
|
||||
|
|
|
|||
|
|
@ -133,7 +133,10 @@ _ASM_NOKPROBE_SYMBOL(\name\()_virt)
|
|||
|
||||
.macro prepare_transfer_to_handler
|
||||
#ifdef CONFIG_PPC_BOOK3S_32
|
||||
andi. r12,r9,MSR_PR
|
||||
bne 777f
|
||||
bl prepare_transfer_to_handler
|
||||
777:
|
||||
#endif
|
||||
.endm
|
||||
|
||||
|
|
|
|||
|
|
@ -105,7 +105,10 @@ END_BTB_FLUSH_SECTION
|
|||
|
||||
.macro prepare_transfer_to_handler
|
||||
#ifdef CONFIG_E500
|
||||
andi. r12,r9,MSR_PR
|
||||
bne 777f
|
||||
bl prepare_transfer_to_handler
|
||||
777:
|
||||
#endif
|
||||
.endm
|
||||
|
||||
|
|
|
|||
|
|
@ -33,6 +33,8 @@ notrace long system_call_exception(long r3, long r4, long r5,
|
|||
{
|
||||
syscall_fn f;
|
||||
|
||||
kuep_lock();
|
||||
|
||||
regs->orig_gpr3 = r3;
|
||||
|
||||
if (IS_ENABLED(CONFIG_PPC_IRQ_SOFT_MASK_DEBUG))
|
||||
|
|
@ -354,6 +356,8 @@ again:
|
|||
*/
|
||||
kuap_user_restore(regs);
|
||||
#endif
|
||||
kuep_unlock();
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue