]> www.pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - arch/x86/kernel/process_32.c
x86, fpu: fix CONFIG_PREEMPT=y corruption of application's FPU stack
[linux-2.6-omap-h63xx.git] / arch / x86 / kernel / process_32.c
index f8476dfbb60d9818f5da08d3a5b95a223930964f..6d5483356e74f9eb161af21bbadf72c7de221cc2 100644 (file)
@@ -649,8 +649,11 @@ struct task_struct * __switch_to(struct task_struct *prev_p, struct task_struct
        /* If the task has used fpu the last 5 timeslices, just do a full
         * restore of the math state immediately to avoid the trap; the
         * chances of needing FPU soon are obviously high now
+        *
+        * tsk_used_math() checks prevent calling math_state_restore(),
+        * which can sleep in the case of !tsk_used_math()
         */
-       if (next_p->fpu_counter > 5)
+       if (tsk_used_math(next_p) && next_p->fpu_counter > 5)
                math_state_restore();
 
        /*