2024-03-25 05:57:41

by Sasha Levin

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

From: Nicholas Piggin <[email protected]>

[ Upstream commit 6735fef14c1f089ae43fd6d43add818b7ff682a8 ]

Stack-passed parameters begin at a different offset in the caller's
stack in the ELFv2 ABI.

Reported-by: Geoff Levand <[email protected]>
Fixes: 8c5fa3b5c4df ("powerpc/64: Make ELFv2 the default for big-endian builds")
Signed-off-by: Nicholas Piggin <[email protected]>
Tested-by: Geoff Levand <[email protected]>
Signed-off-by: Michael Ellerman <[email protected]>
Link: https://msgid.link/[email protected]
Signed-off-by: Sasha Levin <[email protected]>
---
arch/powerpc/include/asm/ppc_asm.h | 6 ++++--
arch/powerpc/platforms/ps3/hvcall.S | 18 +++++++++---------
2 files changed, 13 insertions(+), 11 deletions(-)

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



2024-03-26 04:36:55

by Michael Ellerman

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

Sasha Levin <[email protected]> writes:
> From: Nicholas Piggin <[email protected]>
>
> [ Upstream commit 6735fef14c1f089ae43fd6d43add818b7ff682a8 ]
>
> Stack-passed parameters begin at a different offset in the caller's
> stack in the ELFv2 ABI.
>
> Reported-by: Geoff Levand <[email protected]>
> Fixes: 8c5fa3b5c4df ("powerpc/64: Make ELFv2 the default for big-endian builds")
> Signed-off-by: Nicholas Piggin <[email protected]>
> Tested-by: Geoff Levand <[email protected]>
> Signed-off-by: Michael Ellerman <[email protected]>
> Link: https://msgid.link/[email protected]
> Signed-off-by: Sasha Levin <[email protected]>
> ---
> 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

2024-03-26 19:27:20

by Sasha Levin

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

On Tue, Mar 26, 2024 at 03:36:15PM +1100, Michael Ellerman wrote:
>Sasha Levin <[email protected]> writes:
>> From: Nicholas Piggin <[email protected]>
>>
>> [ Upstream commit 6735fef14c1f089ae43fd6d43add818b7ff682a8 ]
>>
>> Stack-passed parameters begin at a different offset in the caller's
>> stack in the ELFv2 ABI.
>>
>> Reported-by: Geoff Levand <[email protected]>
>> Fixes: 8c5fa3b5c4df ("powerpc/64: Make ELFv2 the default for big-endian builds")
>> Signed-off-by: Nicholas Piggin <[email protected]>
>> Tested-by: Geoff Levand <[email protected]>
>> Signed-off-by: Michael Ellerman <[email protected]>
>> Link: https://msgid.link/[email protected]
>> Signed-off-by: Sasha Levin <[email protected]>
>> ---
>> 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.

Dropped, thanks!

--
Thanks,
Sasha