|
@@ -150,8 +150,8 @@ static inline u32 read_32bit_tls(struct task_struct *t, int tls)
|
|
|
return get_desc_base(&t->thread.tls_array[tls]);
|
|
|
}
|
|
|
|
|
|
-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)
|
|
|
{
|
|
|
int err;
|
|
|
struct pt_regs *childregs;
|
|
@@ -207,10 +207,10 @@ int copy_thread(unsigned long clone_flags, unsigned long sp,
|
|
|
#ifdef CONFIG_IA32_EMULATION
|
|
|
if (is_ia32_task())
|
|
|
err = do_set_thread_area(p, -1,
|
|
|
- (struct user_desc __user *)childregs->si, 0);
|
|
|
+ (struct user_desc __user *)tls, 0);
|
|
|
else
|
|
|
#endif
|
|
|
- err = do_arch_prctl(p, ARCH_SET_FS, childregs->r8);
|
|
|
+ err = do_arch_prctl(p, ARCH_SET_FS, tls);
|
|
|
if (err)
|
|
|
goto out;
|
|
|
}
|