• Mark Rutland's avatar
    arm64: entry: simplify kernel_exit logic · da59f1d0
    Mark Rutland authored
    For historical reasons, the non-KPTI exception return path is duplicated for
    EL1 and EL0, with the structure:
    
    	.if \el == 0
    	[ KPTI handling ]
    	ldr     lr, [sp, #S_LR]
     	add	sp, sp, #PT_REGS_SIZE		// restore sp
    	[ EL0 exception return workaround ]
    	eret
    	.else
    	ldr     lr, [sp, #S_LR]
     	add	sp, sp, #PT_REGS_SIZE		// restore sp
    	[ EL1 exception return workaround ]
    	eret
    	.endif
    	sb
    
    This would be simpler and clearer with the common portions factored out,
    e.g.
    
    	.if \el == 0
    	[ KPTI handling ]
    	.endif
    
    	ldr     lr, [sp, #S_LR]
     	add	sp, sp, #PT_REGS_SIZE		// restore sp
    
    	.if \el == 0
    	[ EL0 exception return workaround ]
    	.else
    	[ EL1 exception return workaround ]
    	.endif
    
    	eret
    	sb
    
    This expands to the same code, but is simpler for a human to follow as
    it avoids duplicates the restore of LR+SP, and makes it clear that the
    ERET is associated with the SB.
    
    There should be no functional change as a result of this patch.
    Signed-off-by: default avatarMark Rutland <mark.rutland@arm.com>
    Cc: Catalin Marinas <catalin.marinas@arm.com>
    Cc: James Morse <james.morse@arm.com>
    Cc: Rob Herring <robh@kernel.org>
    Cc: Will Deacon <will@kernel.org>
    Link: https://lore.kernel.org/r/20240116110221.420467-3-mark.rutland@arm.comSigned-off-by: default avatarWill Deacon <will@kernel.org>
    da59f1d0
entry.S 28.3 KB