Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 09a8dd77 authored by Guo Ren's avatar Guo Ren Committed by Greg Kroah-Hartman
Browse files

csky: Implement copy_thread_tls



commit 0b9f386c4be6493d282aab0af6f9b70c62142777 upstream.

This is required for clone3 which passes the TLS value through a
struct rather than a register.

Cc: Amanieu d'Antras <amanieu@gmail.com>
Signed-off-by: default avatarGuo Ren <guoren@linux.alibaba.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent e28c9b3c
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -36,6 +36,7 @@ config CSKY
	select GX6605S_TIMER if CPU_CK610
	select HAVE_ARCH_TRACEHOOK
	select HAVE_ARCH_AUDITSYSCALL
	select HAVE_COPY_THREAD_TLS
	select HAVE_DYNAMIC_FTRACE
	select HAVE_FUNCTION_TRACER
	select HAVE_FUNCTION_GRAPH_TRACER
+4 −3
Original line number Diff line number Diff line
@@ -34,10 +34,11 @@ unsigned long thread_saved_pc(struct task_struct *tsk)
	return sw->r15;
}

int copy_thread(unsigned long clone_flags,
int copy_thread_tls(unsigned long clone_flags,
		unsigned long usp,
		unsigned long kthread_arg,
		struct task_struct *p)
		struct task_struct *p,
		unsigned long tls)
{
	struct switch_stack *childstack;
	struct pt_regs *childregs = task_pt_regs(p);
@@ -64,7 +65,7 @@ int copy_thread(unsigned long clone_flags,
			childregs->usp = usp;
		if (clone_flags & CLONE_SETTLS)
			task_thread_info(p)->tp_value = childregs->tls
						      = childregs->regs[0];
						      = tls;

		childregs->a0 = 0;
		childstack->r15 = (unsigned long) ret_from_fork;