MIPS: Opt into HAVE_COPY_THREAD_TLS
authorJames Cowgill <James.Cowgill@imgtec.com>
Fri, 31 Mar 2017 16:09:58 +0000 (17:09 +0100)
committerRalf Baechle <ralf@linux-mips.org>
Wed, 12 Apr 2017 11:52:21 +0000 (13:52 +0200)
This the mips version of commit c1bd55f922a2d ("x86: opt into
HAVE_COPY_THREAD_TLS, for both 32-bit and 64-bit").

Simply use the tls system call argument instead of extracting the tls
argument by magic from the pt_regs structure.

See commit 3033f14ab78c3 ("clone: support passing tls argument via C
rather than pt_regs magic") for more background.

Signed-off-by: James Cowgill <James.Cowgill@imgtec.com>
Cc: linux-mips@linux-mips.org
Patchwork: https://patchwork.linux-mips.org/patch/15855/
Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
arch/mips/Kconfig
arch/mips/kernel/process.c

index 2afb41c..52d81ca 100644 (file)
@@ -70,6 +70,7 @@ config MIPS
        select HAVE_EXIT_THREAD
        select HAVE_REGS_AND_STACK_ACCESS_API
        select HAVE_ARCH_HARDENED_USERCOPY
+       select HAVE_COPY_THREAD_TLS
 
 menu "Machine selection"
 
index b68e10f..918d4c7 100644 (file)
@@ -114,8 +114,8 @@ int arch_dup_task_struct(struct task_struct *dst, struct task_struct *src)
 /*
  * Copy architecture-specific thread state
  */
-int copy_thread(unsigned long clone_flags, unsigned long usp,
-       unsigned long kthread_arg, struct task_struct *p)
+int copy_thread_tls(unsigned long clone_flags, unsigned long usp,
+       unsigned long kthread_arg, struct task_struct *p, unsigned long tls)
 {
        struct thread_info *ti = task_thread_info(p);
        struct pt_regs *childregs, *regs = current_pt_regs();
@@ -176,7 +176,7 @@ int copy_thread(unsigned long clone_flags, unsigned long usp,
        atomic_set(&p->thread.bd_emu_frame, BD_EMUFRAME_NONE);
 
        if (clone_flags & CLONE_SETTLS)
-               ti->tp_value = regs->regs[7];
+               ti->tp_value = tls;
 
        return 0;
 }