Re: [PATCH 6.6 430/638] powerpc/ps3: Fix lv1 hcall assembly for ELFv2 calling convention

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Sasha Levin <sashal@xxxxxxxxxx> writes:
> From: Nicholas Piggin <npiggin@xxxxxxxxx>
>
> [ Upstream commit 6735fef14c1f089ae43fd6d43add818b7ff682a8 ]
>
> Stack-passed parameters begin at a different offset in the caller's
> stack in the ELFv2 ABI.
>
> Reported-by: Geoff Levand <geoff@xxxxxxxxxxxxx>
> Fixes: 8c5fa3b5c4df ("powerpc/64: Make ELFv2 the default for big-endian builds")
> Signed-off-by: Nicholas Piggin <npiggin@xxxxxxxxx>
> Tested-by: Geoff Levand <geoff@xxxxxxxxxxxxx>
> Signed-off-by: Michael Ellerman <mpe@xxxxxxxxxxxxxx>
> Link: https://msgid.link/20231227072405.63751-2-npiggin@xxxxxxxxx
> Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>
> ---
>  arch/powerpc/include/asm/ppc_asm.h  |  6 ++++--
>  arch/powerpc/platforms/ps3/hvcall.S | 18 +++++++++---------
>  2 files changed, 13 insertions(+), 11 deletions(-)

This commit is OK on its own, but it doesn't have any effect unless the
full series up to 914d081ead11 ("Revert "powerpc/ps3_defconfig: Disable
PPC64_BIG_ENDIAN_ELF_ABI_V2"") is backported.

I don't think the full series warrants backporting, it's really enabling
a new feature (ELFv2 build for ps3).

So IMHO please drop this patch from 6.6, 6.7, 6.8.

cheers

> diff --git a/arch/powerpc/include/asm/ppc_asm.h b/arch/powerpc/include/asm/ppc_asm.h
> index e7792aa135105..041ee25955205 100644
> --- a/arch/powerpc/include/asm/ppc_asm.h
> +++ b/arch/powerpc/include/asm/ppc_asm.h
> @@ -201,11 +201,13 @@
>  
>  #ifdef CONFIG_PPC64_ELF_ABI_V2
>  #define STK_GOT		24
> -#define __STK_PARAM(i)	(32 + ((i)-3)*8)
> +#define STK_PARAM_AREA	32
>  #else
>  #define STK_GOT		40
> -#define __STK_PARAM(i)	(48 + ((i)-3)*8)
> +#define STK_PARAM_AREA	48
>  #endif
> +
> +#define __STK_PARAM(i)	(STK_PARAM_AREA + ((i)-3)*8)
>  #define STK_PARAM(i)	__STK_PARAM(__REG_##i)
>  
>  #ifdef CONFIG_PPC64_ELF_ABI_V2
> diff --git a/arch/powerpc/platforms/ps3/hvcall.S b/arch/powerpc/platforms/ps3/hvcall.S
> index 509e30ad01bb4..59ea569debf47 100644
> --- a/arch/powerpc/platforms/ps3/hvcall.S
> +++ b/arch/powerpc/platforms/ps3/hvcall.S
> @@ -714,7 +714,7 @@ _GLOBAL(_##API_NAME)				\
>  	std	r4, 0(r11);			\
>  	ld	r11, -16(r1);			\
>  	std	r5, 0(r11);			\
> -	ld	r11, 48+8*8(r1);		\
> +	ld	r11, STK_PARAM_AREA+8*8(r1);	\
>  	std	r6, 0(r11);			\
>  						\
>  	ld	r0, 16(r1);			\
> @@ -746,22 +746,22 @@ _GLOBAL(_##API_NAME)				\
>  	mflr	r0;				\
>  	std	r0, 16(r1);			\
>  						\
> -	std	r10, 48+8*7(r1);		\
> +	std	r10, STK_PARAM_AREA+8*7(r1);	\
>  						\
>  	li	r11, API_NUMBER;		\
>  	lv1call;				\
>  						\
> -	ld	r11, 48+8*7(r1);		\
> +	ld	r11, STK_PARAM_AREA+8*7(r1);	\
>  	std	r4, 0(r11);			\
> -	ld	r11, 48+8*8(r1);		\
> +	ld	r11, STK_PARAM_AREA+8*8(r1);	\
>  	std	r5, 0(r11);			\
> -	ld	r11, 48+8*9(r1);		\
> +	ld	r11, STK_PARAM_AREA+8*9(r1);	\
>  	std	r6, 0(r11);			\
> -	ld	r11, 48+8*10(r1);		\
> +	ld	r11, STK_PARAM_AREA+8*10(r1);	\
>  	std	r7, 0(r11);			\
> -	ld	r11, 48+8*11(r1);		\
> +	ld	r11, STK_PARAM_AREA+8*11(r1);	\
>  	std	r8, 0(r11);			\
> -	ld	r11, 48+8*12(r1);		\
> +	ld	r11, STK_PARAM_AREA+8*12(r1);	\
>  	std	r9, 0(r11);			\
>  						\
>  	ld	r0, 16(r1);			\
> @@ -777,7 +777,7 @@ _GLOBAL(_##API_NAME)				\
>  	li      r11, API_NUMBER;		\
>  	lv1call;				\
>  						\
> -	ld	r11, 48+8*8(r1);		\
> +	ld	r11, STK_PARAM_AREA+8*8(r1);	\
>  	std	r4, 0(r11);			\
>  						\
>  	ld	r0, 16(r1);			\
> -- 
> 2.43.0




[Index of Archives]     [Linux Kernel]     [Kernel Development Newbies]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite Hiking]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux