powerpc: Wire up clone3 syscall
Wire up the new clone3 syscall added in commit 7f192e3cd3
("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@ellerman.id.au>
Acked-by: Christian Brauner <christian@brauner.io>
Link: https://lore.kernel.org/r/20190724140259.23554-1-mpe@ellerman.id.au
This commit is contained in:
Родитель
609488bc97
Коммит
cee3536d24
|
@ -49,6 +49,7 @@
|
||||||
#define __ARCH_WANT_SYS_FORK
|
#define __ARCH_WANT_SYS_FORK
|
||||||
#define __ARCH_WANT_SYS_VFORK
|
#define __ARCH_WANT_SYS_VFORK
|
||||||
#define __ARCH_WANT_SYS_CLONE
|
#define __ARCH_WANT_SYS_CLONE
|
||||||
|
#define __ARCH_WANT_SYS_CLONE3
|
||||||
|
|
||||||
#endif /* __ASSEMBLY__ */
|
#endif /* __ASSEMBLY__ */
|
||||||
#endif /* _ASM_POWERPC_UNISTD_H_ */
|
#endif /* _ASM_POWERPC_UNISTD_H_ */
|
||||||
|
|
|
@ -597,6 +597,14 @@ ppc_clone:
|
||||||
stw r0,_TRAP(r1) /* register set saved */
|
stw r0,_TRAP(r1) /* register set saved */
|
||||||
b sys_clone
|
b sys_clone
|
||||||
|
|
||||||
|
.globl ppc_clone3
|
||||||
|
ppc_clone3:
|
||||||
|
SAVE_NVGPRS(r1)
|
||||||
|
lwz r0,_TRAP(r1)
|
||||||
|
rlwinm r0,r0,0,0,30 /* clear LSB to indicate full */
|
||||||
|
stw r0,_TRAP(r1) /* register set saved */
|
||||||
|
b sys_clone3
|
||||||
|
|
||||||
.globl ppc_swapcontext
|
.globl ppc_swapcontext
|
||||||
ppc_swapcontext:
|
ppc_swapcontext:
|
||||||
SAVE_NVGPRS(r1)
|
SAVE_NVGPRS(r1)
|
||||||
|
|
|
@ -487,6 +487,11 @@ _GLOBAL(ppc_clone)
|
||||||
bl sys_clone
|
bl sys_clone
|
||||||
b .Lsyscall_exit
|
b .Lsyscall_exit
|
||||||
|
|
||||||
|
_GLOBAL(ppc_clone3)
|
||||||
|
bl save_nvgprs
|
||||||
|
bl sys_clone3
|
||||||
|
b .Lsyscall_exit
|
||||||
|
|
||||||
_GLOBAL(ppc32_swapcontext)
|
_GLOBAL(ppc32_swapcontext)
|
||||||
bl save_nvgprs
|
bl save_nvgprs
|
||||||
bl compat_sys_swapcontext
|
bl compat_sys_swapcontext
|
||||||
|
|
|
@ -516,4 +516,4 @@
|
||||||
432 common fsmount sys_fsmount
|
432 common fsmount sys_fsmount
|
||||||
433 common fspick sys_fspick
|
433 common fspick sys_fspick
|
||||||
434 common pidfd_open sys_pidfd_open
|
434 common pidfd_open sys_pidfd_open
|
||||||
# 435 reserved for clone3
|
435 nospu clone3 ppc_clone3
|
||||||
|
|
Загрузка…
Ссылка в новой задаче