All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 2/3] UML - x86_64 thread fixes
@ 2007-02-08 21:57 ` Jeff Dike
  0 siblings, 0 replies; 5+ messages in thread
From: Jeff Dike @ 2007-02-08 21:57 UTC (permalink / raw)
  To: akpm; +Cc: linux-kernel, user-mode-linux-devel, wstearns, Antoine Martin

x86_64 needs some TLS fixes.  What was missing was remembering the
child thread id during clone and stuffing it into the child during
each context switch.

The %fs value is stored separately in the thread structure since the
host controls what effect it has on the actual register file.  The
host also needs to store it in its own thread struct, so we need the
value kept outside the register file.

arch_prctl_skas was fixed to call PTRACE_ARCH_PRCTL appropriately.
There is some saving and restoring of registers in the ARCH_SET_*
cases so that the correct set of registers are changed on the host and
restored to the process when it runs again.

Signed-off-by: Jeff Dike <jdike@addtoit.com>
--
 arch/um/include/os.h                 |    2 
 arch/um/os-Linux/sys-x86_64/Makefile |    2 
 arch/um/os-Linux/sys-x86_64/prctl.c  |   12 +++++
 arch/um/sys-x86_64/syscalls.c        |   73 ++++++++++++++++++++++++++---------
 arch/um/sys-x86_64/tls.c             |   11 +++--
 include/asm-um/processor-x86_64.h    |    6 +-
 include/asm-um/ptrace-x86_64.h       |    6 --
 7 files changed, 83 insertions(+), 29 deletions(-)

Index: linux-2.6.18-mm/arch/um/include/os.h
===================================================================
--- linux-2.6.18-mm.orig/arch/um/include/os.h	2007-02-08 16:08:07.000000000 -0500
+++ linux-2.6.18-mm/arch/um/include/os.h	2007-02-08 16:48:02.000000000 -0500
@@ -340,4 +340,6 @@ extern void maybe_sigio_broken(int fd, i
 extern void sig_handler_common_skas(int sig, void *sc_ptr);
 extern void user_signal(int sig, union uml_pt_regs *regs, int pid);
 
+extern int os_arch_prctl(int pid, int code, unsigned long *addr);
+
 #endif
Index: linux-2.6.18-mm/arch/um/os-Linux/sys-x86_64/Makefile
===================================================================
--- linux-2.6.18-mm.orig/arch/um/os-Linux/sys-x86_64/Makefile	2007-02-08 16:08:07.000000000 -0500
+++ linux-2.6.18-mm/arch/um/os-Linux/sys-x86_64/Makefile	2007-02-08 16:08:28.000000000 -0500
@@ -3,7 +3,7 @@
 # Licensed under the GPL
 #
 
-obj-$(CONFIG_MODE_SKAS) = registers.o signal.o
+obj-$(CONFIG_MODE_SKAS) = registers.o prctl.o signal.o
 
 USER_OBJS := $(obj-y)
 
Index: linux-2.6.18-mm/arch/um/os-Linux/sys-x86_64/prctl.c
===================================================================
--- /dev/null	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.18-mm/arch/um/os-Linux/sys-x86_64/prctl.c	2007-02-08 16:08:28.000000000 -0500
@@ -0,0 +1,12 @@
+/*
+ * Copyright (C) 2007 Jeff Dike (jdike@{addtoit.com,linux.intel.com})
+ * Licensed under the GPL
+ */
+
+#include <sys/ptrace.h>
+#include <linux/ptrace.h>
+
+int os_arch_prctl(int pid, int code, unsigned long *addr)
+{
+        return ptrace(PTRACE_ARCH_PRCTL, pid, (unsigned long) addr, code);
+}
Index: linux-2.6.18-mm/arch/um/sys-x86_64/syscalls.c
===================================================================
--- linux-2.6.18-mm.orig/arch/um/sys-x86_64/syscalls.c	2007-02-08 16:08:07.000000000 -0500
+++ linux-2.6.18-mm/arch/um/sys-x86_64/syscalls.c	2007-02-08 16:48:02.000000000 -0500
@@ -16,6 +16,7 @@
 #include "asm/prctl.h" /* XXX This should get the constants from libc */
 #include "choose-mode.h"
 #include "kern.h"
+#include "os.h"
 
 asmlinkage long sys_uname64(struct new_utsname __user * name)
 {
@@ -58,40 +59,67 @@ static long arch_prctl_tt(int code, unsi
 
 #ifdef CONFIG_MODE_SKAS
 
-/* XXX: Must also call arch_prctl in the host, beside saving the segment bases! */
-static long arch_prctl_skas(int code, unsigned long addr)
+static long arch_prctl_skas(int code, unsigned long __user *addr)
 {
-	long ret = 0;
+        unsigned long *ptr = addr, tmp;
+	long ret;
+        int pid = current->mm->context.skas.id.u.pid;
 
+	/*
+	 * With ARCH_SET_FS (and ARCH_SET_GS is treated similarly to
+	 * be safe), we need to call arch_prctl on the host because
+	 * setting %fs may result in something else happening (like a
+	 * GDT being set instead).  So, we let the host fiddle the
+	 * registers and restore them afterwards.
+	 *
+	 * So, the saved registers are stored to the process (this
+	 * needed because a stub may have been the last thing to run),
+	 * arch_prctl is run on the host, then the registers are read
+	 * back.
+	 */
 	switch(code){
 	case ARCH_SET_FS:
-		current->thread.regs.regs.skas.regs[FS_BASE / sizeof(unsigned long)] = addr;
-		break;
 	case ARCH_SET_GS:
-		current->thread.regs.regs.skas.regs[GS_BASE / sizeof(unsigned long)] = addr;
+                restore_registers(pid, &current->thread.regs.regs);
+                break;
+        case ARCH_GET_FS:
+        case ARCH_GET_GS:
+                /*
+                 * With these two, we read to a local pointer and
+                 * put_user it to the userspace pointer that we were
+                 * given.  If addr isn't valid (because it hasn't been
+                 * faulted in or is just bogus), we want put_user to
+                 * fault it in (or return -EFAULT) instead of having
+                 * the host return -EFAULT.
+                 */
+                ptr = &tmp;
+        }
+
+        ret = os_arch_prctl(pid, code, ptr);
+        if(ret)
+                return ret;
+
+        switch(code){
+	case ARCH_SET_FS:
+	case ARCH_SET_GS:
+                save_registers(pid, &current->thread.regs.regs);
 		break;
 	case ARCH_GET_FS:
-		ret = put_user(current->thread.regs.regs.skas.
-				regs[FS_BASE / sizeof(unsigned long)],
-				(unsigned long __user *)addr);
+		ret = put_user(tmp, addr);
 	        break;
 	case ARCH_GET_GS:
-		ret = put_user(current->thread.regs.regs.skas.
-				regs[GS_BASE / sizeof(unsigned long)],
-				(unsigned long __user *)addr);
+		ret = put_user(tmp, addr);
 	        break;
-	default:
-		ret = -EINVAL;
-		break;
 	}
 
-	return(ret);
+	return ret;
 }
 #endif
 
 long sys_arch_prctl(int code, unsigned long addr)
 {
-	return(CHOOSE_MODE_PROC(arch_prctl_tt, arch_prctl_skas, code, addr));
+	return CHOOSE_MODE_PROC(arch_prctl_tt, arch_prctl_skas, code,
+                                (unsigned long __user *) addr);
 }
 
 long sys_clone(unsigned long clone_flags, unsigned long newsp,
@@ -105,5 +133,14 @@ long sys_clone(unsigned long clone_flags
 	ret = do_fork(clone_flags, newsp, &current->thread.regs, 0, parent_tid,
 		      child_tid);
 	current->thread.forking = 0;
-	return(ret);
+	return ret;
 }
+
+void arch_switch_to_skas(struct task_struct *from, struct task_struct *to)
+{
+        if(to->thread.arch.fs == 0)
+                return;
+
+        arch_prctl_skas(ARCH_SET_FS, (void __user *) to->thread.arch.fs);
+}
+
Index: linux-2.6.18-mm/include/asm-um/processor-x86_64.h
===================================================================
--- linux-2.6.18-mm.orig/include/asm-um/processor-x86_64.h	2007-02-08 16:08:07.000000000 -0500
+++ linux-2.6.18-mm/include/asm-um/processor-x86_64.h	2007-02-08 16:49:22.000000000 -0500
@@ -13,6 +13,7 @@
 struct arch_thread {
         unsigned long debugregs[8];
         int debugregs_seq;
+        unsigned long fs;
         struct faultinfo faultinfo;
 };
 
@@ -25,8 +26,9 @@ extern inline void rep_nop(void)
 #define cpu_relax()   rep_nop()
 
 #define INIT_ARCH_THREAD { .debugregs  		= { [ 0 ... 7 ] = 0 }, \
-                           .debugregs_seq	= 0, \
-                           .faultinfo		= { 0, 0, 0 } }
+                           .debugregs_seq	= 0,			       \
+			   .fs			= 0, \
+			   .faultinfo		= { 0, 0, 0 } }
 
 static inline void arch_flush_thread(struct arch_thread *thread)
 {
Index: linux-2.6.18-mm/include/asm-um/ptrace-x86_64.h
===================================================================
--- linux-2.6.18-mm.orig/include/asm-um/ptrace-x86_64.h	2007-02-08 16:08:07.000000000 -0500
+++ linux-2.6.18-mm/include/asm-um/ptrace-x86_64.h	2007-02-08 16:48:02.000000000 -0500
@@ -81,9 +81,7 @@ static inline void arch_switch_to_tt(str
 {
 }
 
-static inline void arch_switch_to_skas(struct task_struct *from,
-                                       struct task_struct *to)
-{
-}
+extern void arch_switch_to_skas(struct task_struct *from,
+				struct task_struct *to);
 
 #endif
Index: linux-2.6.18-mm/arch/um/sys-x86_64/tls.c
===================================================================
--- linux-2.6.18-mm.orig/arch/um/sys-x86_64/tls.c	2007-02-08 16:08:07.000000000 -0500
+++ linux-2.6.18-mm/arch/um/sys-x86_64/tls.c	2007-02-08 16:08:28.000000000 -0500
@@ -1,14 +1,17 @@
 #include "linux/sched.h"
 
-void debug_arch_force_load_TLS(void)
-{
-}
-
 void clear_flushed_tls(struct task_struct *task)
 {
 }
 
 int arch_copy_tls(struct task_struct *t)
 {
+	/*
+	 * If CLONE_SETTLS is set, we need to save the thread id
+	 * (which is argument 5, child_tid, of clone) so it can be set
+	 * during context switches.
+	 */
+	t->thread.arch.fs = t->thread.regs.regs.skas.regs[R8 / sizeof(long)];
+
         return 0;
 }


^ permalink raw reply	[flat|nested] 5+ messages in thread

* [uml-devel] [PATCH 2/3] UML - x86_64 thread fixes
@ 2007-02-08 21:57 ` Jeff Dike
  0 siblings, 0 replies; 5+ messages in thread
From: Jeff Dike @ 2007-02-08 21:57 UTC (permalink / raw)
  To: akpm; +Cc: wstearns, linux-kernel, user-mode-linux-devel

x86_64 needs some TLS fixes.  What was missing was remembering the
child thread id during clone and stuffing it into the child during
each context switch.

The %fs value is stored separately in the thread structure since the
host controls what effect it has on the actual register file.  The
host also needs to store it in its own thread struct, so we need the
value kept outside the register file.

arch_prctl_skas was fixed to call PTRACE_ARCH_PRCTL appropriately.
There is some saving and restoring of registers in the ARCH_SET_*
cases so that the correct set of registers are changed on the host and
restored to the process when it runs again.

Signed-off-by: Jeff Dike <jdike@addtoit.com>
--
 arch/um/include/os.h                 |    2 
 arch/um/os-Linux/sys-x86_64/Makefile |    2 
 arch/um/os-Linux/sys-x86_64/prctl.c  |   12 +++++
 arch/um/sys-x86_64/syscalls.c        |   73 ++++++++++++++++++++++++++---------
 arch/um/sys-x86_64/tls.c             |   11 +++--
 include/asm-um/processor-x86_64.h    |    6 +-
 include/asm-um/ptrace-x86_64.h       |    6 --
 7 files changed, 83 insertions(+), 29 deletions(-)

Index: linux-2.6.18-mm/arch/um/include/os.h
===================================================================
--- linux-2.6.18-mm.orig/arch/um/include/os.h	2007-02-08 16:08:07.000000000 -0500
+++ linux-2.6.18-mm/arch/um/include/os.h	2007-02-08 16:48:02.000000000 -0500
@@ -340,4 +340,6 @@ extern void maybe_sigio_broken(int fd, i
 extern void sig_handler_common_skas(int sig, void *sc_ptr);
 extern void user_signal(int sig, union uml_pt_regs *regs, int pid);
 
+extern int os_arch_prctl(int pid, int code, unsigned long *addr);
+
 #endif
Index: linux-2.6.18-mm/arch/um/os-Linux/sys-x86_64/Makefile
===================================================================
--- linux-2.6.18-mm.orig/arch/um/os-Linux/sys-x86_64/Makefile	2007-02-08 16:08:07.000000000 -0500
+++ linux-2.6.18-mm/arch/um/os-Linux/sys-x86_64/Makefile	2007-02-08 16:08:28.000000000 -0500
@@ -3,7 +3,7 @@
 # Licensed under the GPL
 #
 
-obj-$(CONFIG_MODE_SKAS) = registers.o signal.o
+obj-$(CONFIG_MODE_SKAS) = registers.o prctl.o signal.o
 
 USER_OBJS := $(obj-y)
 
Index: linux-2.6.18-mm/arch/um/os-Linux/sys-x86_64/prctl.c
===================================================================
--- /dev/null	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.18-mm/arch/um/os-Linux/sys-x86_64/prctl.c	2007-02-08 16:08:28.000000000 -0500
@@ -0,0 +1,12 @@
+/*
+ * Copyright (C) 2007 Jeff Dike (jdike@{addtoit.com,linux.intel.com})
+ * Licensed under the GPL
+ */
+
+#include <sys/ptrace.h>
+#include <linux/ptrace.h>
+
+int os_arch_prctl(int pid, int code, unsigned long *addr)
+{
+        return ptrace(PTRACE_ARCH_PRCTL, pid, (unsigned long) addr, code);
+}
Index: linux-2.6.18-mm/arch/um/sys-x86_64/syscalls.c
===================================================================
--- linux-2.6.18-mm.orig/arch/um/sys-x86_64/syscalls.c	2007-02-08 16:08:07.000000000 -0500
+++ linux-2.6.18-mm/arch/um/sys-x86_64/syscalls.c	2007-02-08 16:48:02.000000000 -0500
@@ -16,6 +16,7 @@
 #include "asm/prctl.h" /* XXX This should get the constants from libc */
 #include "choose-mode.h"
 #include "kern.h"
+#include "os.h"
 
 asmlinkage long sys_uname64(struct new_utsname __user * name)
 {
@@ -58,40 +59,67 @@ static long arch_prctl_tt(int code, unsi
 
 #ifdef CONFIG_MODE_SKAS
 
-/* XXX: Must also call arch_prctl in the host, beside saving the segment bases! */
-static long arch_prctl_skas(int code, unsigned long addr)
+static long arch_prctl_skas(int code, unsigned long __user *addr)
 {
-	long ret = 0;
+        unsigned long *ptr = addr, tmp;
+	long ret;
+        int pid = current->mm->context.skas.id.u.pid;
 
+	/*
+	 * With ARCH_SET_FS (and ARCH_SET_GS is treated similarly to
+	 * be safe), we need to call arch_prctl on the host because
+	 * setting %fs may result in something else happening (like a
+	 * GDT being set instead).  So, we let the host fiddle the
+	 * registers and restore them afterwards.
+	 *
+	 * So, the saved registers are stored to the process (this
+	 * needed because a stub may have been the last thing to run),
+	 * arch_prctl is run on the host, then the registers are read
+	 * back.
+	 */
 	switch(code){
 	case ARCH_SET_FS:
-		current->thread.regs.regs.skas.regs[FS_BASE / sizeof(unsigned long)] = addr;
-		break;
 	case ARCH_SET_GS:
-		current->thread.regs.regs.skas.regs[GS_BASE / sizeof(unsigned long)] = addr;
+                restore_registers(pid, &current->thread.regs.regs);
+                break;
+        case ARCH_GET_FS:
+        case ARCH_GET_GS:
+                /*
+                 * With these two, we read to a local pointer and
+                 * put_user it to the userspace pointer that we were
+                 * given.  If addr isn't valid (because it hasn't been
+                 * faulted in or is just bogus), we want put_user to
+                 * fault it in (or return -EFAULT) instead of having
+                 * the host return -EFAULT.
+                 */
+                ptr = &tmp;
+        }
+
+        ret = os_arch_prctl(pid, code, ptr);
+        if(ret)
+                return ret;
+
+        switch(code){
+	case ARCH_SET_FS:
+	case ARCH_SET_GS:
+                save_registers(pid, &current->thread.regs.regs);
 		break;
 	case ARCH_GET_FS:
-		ret = put_user(current->thread.regs.regs.skas.
-				regs[FS_BASE / sizeof(unsigned long)],
-				(unsigned long __user *)addr);
+		ret = put_user(tmp, addr);
 	        break;
 	case ARCH_GET_GS:
-		ret = put_user(current->thread.regs.regs.skas.
-				regs[GS_BASE / sizeof(unsigned long)],
-				(unsigned long __user *)addr);
+		ret = put_user(tmp, addr);
 	        break;
-	default:
-		ret = -EINVAL;
-		break;
 	}
 
-	return(ret);
+	return ret;
 }
 #endif
 
 long sys_arch_prctl(int code, unsigned long addr)
 {
-	return(CHOOSE_MODE_PROC(arch_prctl_tt, arch_prctl_skas, code, addr));
+	return CHOOSE_MODE_PROC(arch_prctl_tt, arch_prctl_skas, code,
+                                (unsigned long __user *) addr);
 }
 
 long sys_clone(unsigned long clone_flags, unsigned long newsp,
@@ -105,5 +133,14 @@ long sys_clone(unsigned long clone_flags
 	ret = do_fork(clone_flags, newsp, &current->thread.regs, 0, parent_tid,
 		      child_tid);
 	current->thread.forking = 0;
-	return(ret);
+	return ret;
 }
+
+void arch_switch_to_skas(struct task_struct *from, struct task_struct *to)
+{
+        if(to->thread.arch.fs == 0)
+                return;
+
+        arch_prctl_skas(ARCH_SET_FS, (void __user *) to->thread.arch.fs);
+}
+
Index: linux-2.6.18-mm/include/asm-um/processor-x86_64.h
===================================================================
--- linux-2.6.18-mm.orig/include/asm-um/processor-x86_64.h	2007-02-08 16:08:07.000000000 -0500
+++ linux-2.6.18-mm/include/asm-um/processor-x86_64.h	2007-02-08 16:49:22.000000000 -0500
@@ -13,6 +13,7 @@
 struct arch_thread {
         unsigned long debugregs[8];
         int debugregs_seq;
+        unsigned long fs;
         struct faultinfo faultinfo;
 };
 
@@ -25,8 +26,9 @@ extern inline void rep_nop(void)
 #define cpu_relax()   rep_nop()
 
 #define INIT_ARCH_THREAD { .debugregs  		= { [ 0 ... 7 ] = 0 }, \
-                           .debugregs_seq	= 0, \
-                           .faultinfo		= { 0, 0, 0 } }
+                           .debugregs_seq	= 0,			       \
+			   .fs			= 0, \
+			   .faultinfo		= { 0, 0, 0 } }
 
 static inline void arch_flush_thread(struct arch_thread *thread)
 {
Index: linux-2.6.18-mm/include/asm-um/ptrace-x86_64.h
===================================================================
--- linux-2.6.18-mm.orig/include/asm-um/ptrace-x86_64.h	2007-02-08 16:08:07.000000000 -0500
+++ linux-2.6.18-mm/include/asm-um/ptrace-x86_64.h	2007-02-08 16:48:02.000000000 -0500
@@ -81,9 +81,7 @@ static inline void arch_switch_to_tt(str
 {
 }
 
-static inline void arch_switch_to_skas(struct task_struct *from,
-                                       struct task_struct *to)
-{
-}
+extern void arch_switch_to_skas(struct task_struct *from,
+				struct task_struct *to);
 
 #endif
Index: linux-2.6.18-mm/arch/um/sys-x86_64/tls.c
===================================================================
--- linux-2.6.18-mm.orig/arch/um/sys-x86_64/tls.c	2007-02-08 16:08:07.000000000 -0500
+++ linux-2.6.18-mm/arch/um/sys-x86_64/tls.c	2007-02-08 16:08:28.000000000 -0500
@@ -1,14 +1,17 @@
 #include "linux/sched.h"
 
-void debug_arch_force_load_TLS(void)
-{
-}
-
 void clear_flushed_tls(struct task_struct *task)
 {
 }
 
 int arch_copy_tls(struct task_struct *t)
 {
+	/*
+	 * If CLONE_SETTLS is set, we need to save the thread id
+	 * (which is argument 5, child_tid, of clone) so it can be set
+	 * during context switches.
+	 */
+	t->thread.arch.fs = t->thread.regs.regs.skas.regs[R8 / sizeof(long)];
+
         return 0;
 }


-------------------------------------------------------------------------
Using Tomcat but need to do more? Need to support web services, security?
Get stuff done quickly with pre-integrated technology to make your job easier.
Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642
_______________________________________________
User-mode-linux-devel mailing list
User-mode-linux-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/user-mode-linux-devel

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [uml-devel] [PATCH 2/3] UML - x86_64 thread fixes
  2007-02-08 21:57 ` [uml-devel] " Jeff Dike
@ 2007-02-22  0:07   ` Blaisorblade
  -1 siblings, 0 replies; 5+ messages in thread
From: Blaisorblade @ 2007-02-22  0:07 UTC (permalink / raw)
  To: user-mode-linux-devel; +Cc: Jeff Dike, akpm, wstearns, linux-kernel

On Thursday 08 February 2007 22:57, Jeff Dike wrote:
> x86_64 needs some TLS fixes.  What was missing was remembering the
> child thread id during clone and stuffing it into the child during
> each context switch.
>
> The %fs value is stored separately in the thread structure since the
> host controls what effect it has on the actual register file.  The
> host also needs to store it in its own thread struct, so we need the
> value kept outside the register file.
Is there any reason for avoiding this treatment to %gs, apart that TLS code 
usually does not need it, even if the API allows for it to exist? I _do_ 
believe this patch fixes bug which can be tested (not verified everything), 
even if I wonder why you didn't look at the patch I sent to you time ago (I 
hadn't finished it, in truth, but there was most stuff - it had problems I 
couldn't debug at that time).
-- 
Inform me of my mistakes, so I can add them to my list!
Paolo Giarrusso, aka Blaisorblade
http://www.user-mode-linux.org/~blaisorblade
Chiacchiera con i tuoi amici in tempo reale! 
 http://it.yahoo.com/mail_it/foot/*http://it.messenger.yahoo.com 

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [uml-devel] [PATCH 2/3] UML - x86_64 thread fixes
@ 2007-02-22  0:07   ` Blaisorblade
  0 siblings, 0 replies; 5+ messages in thread
From: Blaisorblade @ 2007-02-22  0:07 UTC (permalink / raw)
  To: user-mode-linux-devel; +Cc: akpm, Jeff Dike, linux-kernel, wstearns

On Thursday 08 February 2007 22:57, Jeff Dike wrote:
> x86_64 needs some TLS fixes.  What was missing was remembering the
> child thread id during clone and stuffing it into the child during
> each context switch.
>
> The %fs value is stored separately in the thread structure since the
> host controls what effect it has on the actual register file.  The
> host also needs to store it in its own thread struct, so we need the
> value kept outside the register file.
Is there any reason for avoiding this treatment to %gs, apart that TLS code 
usually does not need it, even if the API allows for it to exist? I _do_ 
believe this patch fixes bug which can be tested (not verified everything), 
even if I wonder why you didn't look at the patch I sent to you time ago (I 
hadn't finished it, in truth, but there was most stuff - it had problems I 
couldn't debug at that time).
-- 
Inform me of my mistakes, so I can add them to my list!
Paolo Giarrusso, aka Blaisorblade
http://www.user-mode-linux.org/~blaisorblade
Chiacchiera con i tuoi amici in tempo reale! 
 http://it.yahoo.com/mail_it/foot/*http://it.messenger.yahoo.com 


-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT & business topics through brief surveys-and earn cash
http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
_______________________________________________
User-mode-linux-devel mailing list
User-mode-linux-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/user-mode-linux-devel

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [uml-devel] [PATCH 2/3] UML - x86_64 thread fixes
  2007-02-22  0:07   ` Blaisorblade
  (?)
@ 2007-02-22 16:54   ` Jeff Dike
  -1 siblings, 0 replies; 5+ messages in thread
From: Jeff Dike @ 2007-02-22 16:54 UTC (permalink / raw)
  To: Blaisorblade; +Cc: akpm, wstearns, user-mode-linux-devel, linux-kernel

On Thu, Feb 22, 2007 at 01:07:30AM +0100, Blaisorblade wrote:
> Is there any reason for avoiding this treatment to %gs, apart that TLS code 
> usually does not need it, even if the API allows for it to exist?

Is there any prospect that %gs will be getting similar treatment?  %fs is
set through CLONE_SETTLS, so it would seem that something like a new
clone flag would be required for this.

> I _do_ 
> believe this patch fixes bug which can be tested (not verified everything), 
> even if I wonder why you didn't look at the patch I sent to you time ago (I 
> hadn't finished it, in truth, but there was most stuff - it had problems I 
> couldn't debug at that time).

Maybe because I forgot about it - do you have a pointer?

				Jeff

-- 
Work email - jdike at linux dot intel dot com

-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT & business topics through brief surveys-and earn cash
http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
_______________________________________________
User-mode-linux-devel mailing list
User-mode-linux-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/user-mode-linux-devel

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2007-02-22 17:02 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2007-02-08 21:57 [PATCH 2/3] UML - x86_64 thread fixes Jeff Dike
2007-02-08 21:57 ` [uml-devel] " Jeff Dike
2007-02-22  0:07 ` Blaisorblade
2007-02-22  0:07   ` Blaisorblade
2007-02-22 16:54   ` Jeff Dike

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.