select LOCKDEP_SMALL if LOCKDEP
        select NEED_DMA_MAP_STATE
        select NEED_SG_DMA_LENGTH
+       select HAVE_COPY_THREAD_TLS
 
 config SPARC32
        def_bool !64BIT
        select ARCH_HAS_PTE_SPECIAL
        select PCI_DOMAINS if PCI
        select ARCH_HAS_GIGANTIC_PAGE
-       select HAVE_COPY_THREAD_TLS
 
 config ARCH_PROC_KCORE_TEXT
        def_bool y
 
 extern void ret_from_fork(void);
 extern void ret_from_kernel_thread(void);
 
-int copy_thread(unsigned long clone_flags, unsigned long sp,
-               unsigned long arg, struct task_struct *p)
+int copy_thread_tls(unsigned long clone_flags, unsigned long sp,
+                   unsigned long arg, struct task_struct *p,
+                   unsigned long tls)
 {
        struct thread_info *ti = task_thread_info(p);
        struct pt_regs *childregs, *regs = current_pt_regs();
        regs->u_regs[UREG_I1] = 0;
 
        if (clone_flags & CLONE_SETTLS)
-               childregs->u_regs[UREG_G7] = regs->u_regs[UREG_I3];
+               childregs->u_regs[UREG_G7] = tls;
 
        return 0;
 }