Re: [PATCH] powerpc: Wire up clone3 syscall

From: Christian Brauner
Date: Mon Jul 22 2019 - 09:37:08 EST


On Mon, Jul 22, 2019 at 11:22:31PM +1000, Michael Ellerman wrote:
> Wire up the new clone3 syscall added in commit 7f192e3cd316 ("fork:
> add clone3").
>
> This requires a ppc_clone3 wrapper, in order to save the non-volatile
> GPRs before calling into the generic syscall code. Otherwise we hit
> the BUG_ON in CHECK_FULL_REGS in copy_thread().
>
> Lightly tested using Christian's test code on a Power8 LE VM.
>
> Signed-off-by: Michael Ellerman <mpe@xxxxxxxxxxxxxx>

Thank you, Michael!

One comment below, otherwise:

Acked-by: Christian Brauner <christian@xxxxxxxxxx>

> ---
> arch/powerpc/include/asm/unistd.h | 1 +
> arch/powerpc/kernel/entry_64.S | 5 +++++
> arch/powerpc/kernel/syscalls/syscall.tbl | 1 +
> 3 files changed, 7 insertions(+)
>
> diff --git a/arch/powerpc/include/asm/unistd.h b/arch/powerpc/include/asm/unistd.h
> index 68473c3c471c..b0720c7c3fcf 100644
> --- a/arch/powerpc/include/asm/unistd.h
> +++ b/arch/powerpc/include/asm/unistd.h
> @@ -49,6 +49,7 @@
> #define __ARCH_WANT_SYS_FORK
> #define __ARCH_WANT_SYS_VFORK
> #define __ARCH_WANT_SYS_CLONE
> +#define __ARCH_WANT_SYS_CLONE3
>
> #endif /* __ASSEMBLY__ */
> #endif /* _ASM_POWERPC_UNISTD_H_ */
> diff --git a/arch/powerpc/kernel/entry_64.S b/arch/powerpc/kernel/entry_64.S
> index d9105fcf4021..0a0b5310f54a 100644
> --- a/arch/powerpc/kernel/entry_64.S
> +++ b/arch/powerpc/kernel/entry_64.S
> @@ -487,6 +487,11 @@ _GLOBAL(ppc_clone)
> bl sys_clone
> b .Lsyscall_exit
>
> +_GLOBAL(ppc_clone3)
> + bl save_nvgprs
> + bl sys_clone3
> + b .Lsyscall_exit
> +
> _GLOBAL(ppc32_swapcontext)
> bl save_nvgprs
> bl compat_sys_swapcontext
> diff --git a/arch/powerpc/kernel/syscalls/syscall.tbl b/arch/powerpc/kernel/syscalls/syscall.tbl
> index f2c3bda2d39f..6886ecb590d5 100644
> --- a/arch/powerpc/kernel/syscalls/syscall.tbl
> +++ b/arch/powerpc/kernel/syscalls/syscall.tbl
> @@ -516,3 +516,4 @@
> 432 common fsmount sys_fsmount
> 433 common fspick sys_fspick
> 434 common pidfd_open sys_pidfd_open
> +435 common clone3 ppc_clone3

Note that in v5.3-rc1 there's now a comment that 435 is reserved in
there. So this will likely cause a merge conflict. You might want to
base your change off of v5.3-rc1 instead to avoid that. :)

So basically: