powerpc: copy_thread don't set _TIF_RESTOREALL
In the kernel user thread path, don't set _TIF_RESTOREALL because the thread is required to call kernel_execve() before it returns, which will set _TIF_RESTOREALL if necessary via start_thread(). Signed-off-by: Nicholas Piggin <npiggin@gmail.com> Signed-off-by: Michael Ellerman <mpe@ellerman.id.au> Link: https://msgid.link/20230325122904.2375060-8-npiggin@gmail.com
This commit is contained in:
parent
b504b6aade
commit
d195ce4695
@ -748,6 +748,11 @@ _GLOBAL(ret_from_kernel_user_thread)
|
||||
#endif
|
||||
bctrl
|
||||
li r3,0
|
||||
/*
|
||||
* It does not matter whether this returns via the scv or sc path
|
||||
* because it returns as execve() and therefore has no calling ABI
|
||||
* (i.e., it sets registers according to the exec()ed entry point).
|
||||
*/
|
||||
b .Lsyscall_exit
|
||||
|
||||
_GLOBAL(start_kernel_thread)
|
||||
|
@ -1745,7 +1745,6 @@ int copy_thread(struct task_struct *p, const struct kernel_clone_args *args)
|
||||
extern void start_kernel_thread(void);
|
||||
void (*f)(void);
|
||||
unsigned long sp = (unsigned long)task_stack_page(p) + THREAD_SIZE;
|
||||
struct thread_info *ti = task_thread_info(p);
|
||||
#ifdef CONFIG_HAVE_HW_BREAKPOINT
|
||||
int i;
|
||||
#endif
|
||||
@ -1784,7 +1783,6 @@ int copy_thread(struct task_struct *p, const struct kernel_clone_args *args)
|
||||
#ifdef CONFIG_PPC64
|
||||
childregs->softe = IRQS_ENABLED;
|
||||
#endif
|
||||
ti->flags |= _TIF_RESTOREALL;
|
||||
f = ret_from_kernel_user_thread;
|
||||
} else {
|
||||
struct pt_regs *regs = current_pt_regs();
|
||||
|
Loading…
x
Reference in New Issue
Block a user