powerpc: copy_thread differentiate kthreads and user mode threads
authorNicholas Piggin <npiggin@gmail.com>
Sat, 25 Mar 2023 12:29:01 +0000 (22:29 +1000)
committerMichael Ellerman <mpe@ellerman.id.au>
Tue, 11 Apr 2023 13:13:33 +0000 (23:13 +1000)
commiteed7c420aac7fde5e5915d2747c3ebbbda225835
tree8e29bf90b55ef02b7a06dcad15135363210ae863
parent5088a6246bd3dcfea504376f356683f750136f7f
powerpc: copy_thread differentiate kthreads and user mode threads

When copy_thread is given a kernel function to run in arg->fn, this
does not necessarily mean it is a kernel thread. User threads can be
created this way (e.g., kernel_init, see also x86's copy_thread()).
These threads run a kernel function which may call kernel_execve()
and return, which returns like a userspace exec(2) syscall.

Kernel threads are to  be differentiated with PF_KTHREAD, will always
have arg->fn set, and should never return from that function, instead
calling kthread_exit() to exit.

Create separate paths for the kthread and user kernel thread creation
logic. The kthread path will never exit and does not require a user
interrupt frame, so it gets a minimal stack frame.

Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Link: https://msgid.link/20230325122904.2375060-6-npiggin@gmail.com
arch/powerpc/include/asm/thread_info.h
arch/powerpc/kernel/process.c