lkml.org 
[lkml]   [2002]   [Aug]   [13]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
Date
From
SubjectRe: [patch] CLONE_SETTLS, CLONE_SETTID, 2.5.31-BK

On Tue, 13 Aug 2002, Linus Torvalds wrote:

> > CLONE_SETTID => if present then the child TID is written to the
> > address specified by the fourth clone() parameter.
>
> Except you actually test the CLONE_SETTLS bit..

doh - Joe Perches finally told me how to parse this sentence. Correct
patch is:

--- linux/arch/i386/kernel/process.c.orig Tue Aug 13 21:08:01 2002
+++ linux/arch/i386/kernel/process.c Tue Aug 13 21:10:36 2002
@@ -579,6 +579,35 @@
unlazy_fpu(tsk);
struct_cpy(&p->thread.i387, &tsk->thread.i387);

+ /*
+ * Set a new TLS for the child thread?
+ */
+ if (clone_flags & CLONE_SETTLS) {
+ struct desc_struct *desc;
+ struct user_desc info;
+ int idx;
+
+ if (copy_from_user(&info, (void *)childregs->esi, sizeof(info)))
+ return -EFAULT;
+ if (LDT_empty(&info))
+ return -EINVAL;
+
+ idx = info.entry_number;
+ if (idx < GDT_ENTRY_TLS_MIN || idx > GDT_ENTRY_TLS_MAX)
+ return -EINVAL;
+
+ desc = p->thread.tls_array + idx - GDT_ENTRY_TLS_MIN;
+ desc->a = LDT_entry_a(&info);
+ desc->b = LDT_entry_b(&info);
+ }
+
+ /*
+ * Notify the child of the TID?
+ */
+ if (clone_flags & CLONE_SETTID)
+ if (put_user(p->pid, (pid_t *)childregs->edx))
+ return -EFAULT;
+
if (unlikely(NULL != tsk->thread.ts_io_bitmap)) {
p->thread.ts_io_bitmap = kmalloc(IO_BITMAP_BYTES, GFP_KERNEL);
if (!p->thread.ts_io_bitmap)
--- linux/include/linux/sched.h.orig Tue Aug 13 21:01:51 2002
+++ linux/include/linux/sched.h Tue Aug 13 21:08:56 2002
@@ -45,6 +45,8 @@
#define CLONE_THREAD 0x00010000 /* Same thread group? */
#define CLONE_NEWNS 0x00020000 /* New namespace group? */
#define CLONE_SYSVSEM 0x00040000 /* share system V SEM_UNDO semantics */
+#define CLONE_SETTLS 0x00080000 /* create a new TLS for the child */
+#define CLONE_SETTID 0x00100000 /* write the TID back to userspace */

#define CLONE_SIGNAL (CLONE_SIGHAND | CLONE_THREAD)

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/

\
 
 \ /
  Last update: 2005-03-22 13:28    [W:0.106 / U:6.936 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site