powerpc: copy_thread make ret_from_fork register setup consistent
authorNicholas Piggin <npiggin@gmail.com>
Sat, 25 Mar 2023 12:28:58 +0000 (22:28 +1000)
committerMichael Ellerman <mpe@ellerman.id.au>
Tue, 11 Apr 2023 13:13:32 +0000 (23:13 +1000)
The ret_from_fork code for 64e and 32-bit set r3 for
syscall_exit_prepare the same way that 64s does, so there should
be no need to special-case them in copy_thread.

Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Link: https://msgid.link/20230325122904.2375060-3-npiggin@gmail.com
arch/powerpc/kernel/entry_32.S
arch/powerpc/kernel/process.c

index 5604c9a1ac22150372c8c952ef3686a1a84d3b7a..755408c63be8c37ad045f22e3f8f0d9104599b07 100644 (file)
@@ -183,7 +183,7 @@ syscall_exit_finish:
 ret_from_fork:
        REST_NVGPRS(r1)
        bl      schedule_tail
-       li      r3,0
+       li      r3,0    /* fork() return value */
        b       ret_from_syscall
 
        .globl  ret_from_kernel_thread
index 7fe700309151335ed8fc1333651a9f03b5e2c5c0..18f6971121930b6d9aa87ceaa15fba47d2199721 100644 (file)
@@ -1784,9 +1784,6 @@ int copy_thread(struct task_struct *p, const struct kernel_clone_args *args)
                        childregs->gpr[1] = usp;
                ((unsigned long *)sp)[0] = childregs->gpr[1];
                p->thread.regs = childregs;
-               /* 64s sets this in ret_from_fork */
-               if (!IS_ENABLED(CONFIG_PPC_BOOK3S_64))
-                       childregs->gpr[3] = 0;  /* Result from fork() */
                if (clone_flags & CLONE_SETTLS) {
                        if (!is_32bit_task())
                                childregs->gpr[13] = tls;