[PATCH 07/14] powerpc/rtas: PACA can be restored directly from SPRG

Laurent Dufour ldufour at linux.ibm.com
Tue Mar 15 02:32:44 AEDT 2022


On 08/03/2022, 14:50:40, Nicholas Piggin wrote:
> On 64-bit, PACA is saved in a SPRG so it does not need to be saved on
> stack. We also don't need to mask off the top bits for real mode
> addresses because the architecture does this for us.
> 
> Signed-off-by: Nicholas Piggin <npiggin at gmail.com>

Reviewed-by: Laurent Dufour <ldufour at linux.ibm.com>

> ---
>  arch/powerpc/kernel/rtas_entry.S | 13 ++++---------
>  1 file changed, 4 insertions(+), 9 deletions(-)
> 
> diff --git a/arch/powerpc/kernel/rtas_entry.S b/arch/powerpc/kernel/rtas_entry.S
> index 08eb731f08b8..5f65ea4436c6 100644
> --- a/arch/powerpc/kernel/rtas_entry.S
> +++ b/arch/powerpc/kernel/rtas_entry.S
> @@ -62,10 +62,9 @@ _GLOBAL(enter_rtas)
>  
>  	/* Because RTAS is running in 32b mode, it clobbers the high order half
>  	 * of all registers that it saves.  We therefore save those registers
> -	 * RTAS might touch to the stack.  (r0, r3-r13 are caller saved)
> +	 * RTAS might touch to the stack.  (r0, r3-r12 are caller saved)
>  	 */
>  	SAVE_GPR(2, r1)			/* Save the TOC */
> -	SAVE_GPR(13, r1)		/* Save paca */
>  	SAVE_NVGPRS(r1)			/* Save the non-volatiles */
>  
>  	mfcr	r4
> @@ -129,15 +128,14 @@ rtas_return_loc:
>  	mtmsrd	r6
>  
>  	/* relocation is off at this point */
> -	GET_PACA(r4)
> -	clrldi	r4,r4,2			/* convert to realmode address */
> +	GET_PACA(r13)
>  
>  	bcl	20,31,$+4
>  0:	mflr	r3
>  	ld	r3,(1f-0b)(r3)		/* get &rtas_restore_regs */
>  
> -	ld	r1,PACAR1(r4)		/* Restore our SP */
> -	ld	r4,PACASAVEDMSR(r4)	/* Restore our MSR */
> +	ld	r1,PACAR1(r13)		/* Restore our SP */
> +	ld	r4,PACASAVEDMSR(r13)	/* Restore our MSR */
>  
>  	mtspr	SPRN_SRR0,r3
>  	mtspr	SPRN_SRR1,r4
> @@ -153,11 +151,8 @@ _ASM_NOKPROBE_SYMBOL(rtas_return_loc)
>  rtas_restore_regs:
>  	/* relocation is on at this point */
>  	REST_GPR(2, r1)			/* Restore the TOC */
> -	REST_GPR(13, r1)		/* Restore paca */
>  	REST_NVGPRS(r1)			/* Restore the non-volatiles */
>  
> -	GET_PACA(r13)
> -
>  	ld	r4,_CCR(r1)
>  	mtcr	r4
>  	ld	r5,_CTR(r1)



More information about the Linuxppc-dev mailing list