[PATCH v4 02/20] powerpc: Use generic fallocate compatibility syscall

Christophe Leroy christophe.leroy at csgroup.eu
Mon Sep 12 21:00:24 AEST 2022



Le 12/09/2022 à 11:57, Arnd Bergmann a écrit :
> On Mon, Sep 12, 2022, at 10:38 AM, Nicholas Piggin wrote:
>> On Wed Aug 24, 2022 at 12:05 PM AEST, Rohan McLure wrote:
>>> The powerpc fallocate compat syscall handler is identical to the
>>> generic implementation provided by commit 59c10c52f573f ("riscv:
>>> compat: syscall: Add compat_sys_call_table implementation"), and as
>>> such can be removed in favour of the generic implementation.
>>>
>>> A future patch series will replace more architecture-defined syscall
>>> handlers with generic implementations, dependent on introducing generic
>>> implementations that are compatible with powerpc and arm's parameter
>>> reorderings.
>>>
>>> Reported-by: Arnd Bergmann <arnd at arndb.de>
>>> Signed-off-by: Rohan McLure <rmclure at linux.ibm.com>
>>> ---
>>> V1 -> V2: Remove arch-specific fallocate handler.
>>> V2 -> V3: Remove generic fallocate prototype. Move to beginning of
>>> series.
>>> ---
> 
>>> @@ -16,6 +16,11 @@ typedef u16		compat_ipc_pid_t;
>>>   #include <asm-generic/compat.h>
>>>   
>>>   #ifdef __BIG_ENDIAN__
>>> +#define compat_arg_u64(name)		u32  name##_hi, u32  name##_lo
>>> +#define compat_arg_u64_dual(name)	u32, name##_hi, u32, name##_lo
>>> +#define compat_arg_u64_glue(name)	(((u64)name##_lo & 0xffffffffUL) | \
>>> +					 ((u64)name##_hi << 32))
>>
>> Is there a reason not to put this in asm-generic/compat.h?
>>
>> Possibly you want to put this with the other compat definitions and
>> above the asm-generic include. The generic header expects the arch to
>> include it after defining what it wants to override.
> 
> Yes, makes sense. I think the riscv people added this to asm-generic,
> they tried to do only the minimal parts.
> 
> In theory, any architecture could have its own calling conventions
> for each syscall and have them in the opposite order for one
> endianess. I checked the seven non-generic implementations of the
> sys_fallocate() syscall and all except powerpc have the same
> ABI as the generic one.
> 
> The powerpc difference is that in little-endian mode, only
> the 'len' argument is swapped but the 'offset' argument is
> still high/low:
> 
> long compat_sys_fallocate(int fd, int mode, u32 offset1, u32 offset2,
>                                      u32 len1, u32 len2)
> {
>         return ksys_fallocate(fd, mode, ((loff_t)offset1 << 32) | offset2,
>                              merge_64(len1, len2));
> }
> 
> It's probably best to first fix this by using merge_64(offset1,
> offset2) and allow that patch to be backported to stable kernels,
> before changing it over to the generic code in a separate patch
> within that series.
> 
> A related issue seems to exist in ppc_fadvise64_64(), which
> uses the wrong argument order on ppc32le compat tasks, in addition
> to having at least three different calling conventions across
> architectures.

Do ppc32le exist at all ?

Native ppc32 is be only, and I'm not aware that ppc64 is able to run 
ppc32le compat tasks.

Christophe


More information about the Linuxppc-dev mailing list