Re: Oops with strace_test

!MAILaRCHIVE_VOTE_RePLACE
Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]
To: Eric Sesterhenn <snakebyte@...>
Cc: <linux-kernel@...>, <suresh.b.siddha@...>
Date: Monday, May 5, 2008 - 2:00 pm

On Mon, May 05, 2008 at 12:00:08PM +0200, Eric Sesterhenn wrote:
[...]
Hi Eric,

This appears to be caused by init_fpu() missing from the
restore_sigcontext->restore_i387->restore_fpu_checking code path.

I believe that moving the init_fpu() call from math_state_restore to
restore_fpu_checking should fix the problem?

Regards,
Frederik

Signed-off-by: Frederik Deweerdt <frederik.deweerdt@gmail.com>

diff --git a/arch/x86/kernel/traps_64.c b/arch/x86/kernel/traps_64.c
index 8069073..5b1af48 100644
--- a/arch/x86/kernel/traps_64.c
+++ b/arch/x86/kernel/traps_64.c
@@ -1142,22 +1142,6 @@ asmlinkage void math_state_restore(void)
 {
 	struct task_struct *me = current;
 
-	if (!used_math()) {
-		local_irq_enable();
-		/*
-		 * does a slab alloc which can sleep
-		 */
-		if (init_fpu(me)) {
-			/*
-			 * ran out of memory!
-			 */
-			do_group_exit(SIGKILL);
-			return;
-		}
-		local_irq_disable();
-	}
-
-	clts();			/* Allow maths ops (or we recurse) */
 	restore_fpu_checking(&me->thread.xstate->fxsave);
 	task_thread_info(me)->status |= TS_USEDFPU;
 	me->fpu_counter++;
diff --git a/include/asm-x86/i387.h b/include/asm-x86/i387.h
index da2adb4..bf1cabe 100644
--- a/include/asm-x86/i387.h
+++ b/include/asm-x86/i387.h
@@ -47,7 +47,20 @@ static inline void tolerant_fwait(void)
 
 static inline int restore_fpu_checking(struct i387_fxsave_struct *fx)
 {
-	int err;
+	int err = -1;
+
+	if (!used_math()) {
+		local_irq_enable();
+		/*
+		 * does a slab alloc which can sleep
+		 */
+		if (init_fpu(current))
+			return err;
+		local_irq_disable();
+	}
+
+	clts();			/* Allow maths ops (or we recurse) */
 
 	asm volatile("1:  rex64/fxrstor (%[fx])\n\t"
 		     "2:\n"

--
Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]

Messages in current thread:
Oops with strace_test, Eric Sesterhenn, (Wed Apr 30, 8:12 am)
Re: Oops with strace_test, Eric Sesterhenn, (Mon May 5, 6:00 am)
Re: Oops with strace_test, Frederik Deweerdt, (Mon May 5, 2:00 pm)
Re: Oops with strace_test, Ingo Molnar, (Tue May 6, 8:10 am)
Re: Oops with strace_test, Eric Sesterhenn, (Wed May 7, 6:36 am)
Re: Oops with strace_test, Thomas Gleixner, (Wed May 7, 9:36 am)
Re: Oops with strace_test, Eric Sesterhenn, (Wed May 7, 1:20 pm)
Re: Oops with strace_test, Thomas Gleixner, (Wed May 7, 1:26 pm)
Re: Oops with strace_test, Suresh Siddha, (Wed May 7, 3:09 pm)
Re: Oops with strace_test, Thomas Gleixner, (Thu May 8, 11:02 am)
Re: Oops with strace_test, Eric Sesterhenn, (Thu May 8, 2:29 pm)
Re: Oops with strace_test, Eric Sesterhenn, (Wed May 7, 5:46 pm)
Re: Oops with strace_test, Eric Sesterhenn, (Tue May 6, 11:07 am)
Re: Oops with strace_test, Andi Kleen, (Wed Apr 30, 12:19 pm)