• Christophe Leroy's avatar
    powerpc: Remove MSR_PR check in interrupt_exit_{user/kernel}_prepare() · 133c17a1
    Christophe Leroy authored
    In those hot functions that are called at every interrupt, any saved
    cycle is worth it.
    
    interrupt_exit_user_prepare() and interrupt_exit_kernel_prepare() are
    called from three places:
    - From entry_32.S
    - From interrupt_64.S
    - From interrupt_exit_user_restart() and interrupt_exit_kernel_restart()
    
    In entry_32.S, there are inambiguously called based on MSR_PR:
    
    	interrupt_return:
    		lwz	r4,_MSR(r1)
    		addi	r3,r1,STACK_FRAME_OVERHEAD
    		andi.	r0,r4,MSR_PR
    		beq	.Lkernel_interrupt_return
    		bl	interrupt_exit_user_prepare
    	...
    	.Lkernel_interrupt_return:
    		bl	interrupt_exit_kernel_prepare
    
    In interrupt_64.S, that's similar:
    
    	interrupt_return_\srr\():
    		ld	r4,_MSR(r1)
    		andi.	r0,r4,MSR_PR
    		beq	interrupt_return_\srr\()_kernel
    	interrupt_return_\srr\()_user: /* make backtraces match the _kernel variant */
    		addi	r3,r1,STACK_FRAME_OVERHEAD
    		bl	interrupt_exit_user_prepare
    	...
    	interrupt_return_\srr\()_kernel:
    		addi	r3,r1,STACK_FRAME_OVERHEAD
    		bl	interrupt_exit_kernel_prepare
    
    In interrupt_exit_user_restart() and interrupt_exit_kernel_restart(),
    MSR_PR is verified respectively by BUG_ON(!user_mode(regs)) and
    BUG_ON(user_mode(regs)) prior to calling interrupt_exit_user_prepare()
    and interrupt_exit_kernel_prepare().
    
    The verification in interrupt_exit_user_prepare() and
    interrupt_exit_kernel_prepare() are therefore useless and can be removed.
    Signed-off-by: default avatarChristophe Leroy <christophe.leroy@csgroup.eu>
    Acked-by: default avatarNicholas Piggin <npiggin@gmail.com>
    Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
    Link: https://lore.kernel.org/r/385ead49ccb66a259b25fee3eebf0bd4094068f3.1629707037.git.christophe.leroy@csgroup.eu
    133c17a1
interrupt.c 15.8 KB