diff options
Diffstat (limited to 'arch/x86/kernel/process_32.c')
| -rw-r--r-- | arch/x86/kernel/process_32.c | 6 | 
1 files changed, 5 insertions, 1 deletions
diff --git a/arch/x86/kernel/process_32.c b/arch/x86/kernel/process_32.c index f8476dfbb60..e2db9ac5c61 100644 --- a/arch/x86/kernel/process_32.c +++ b/arch/x86/kernel/process_32.c @@ -333,6 +333,7 @@ void flush_thread(void)  	/*  	 * Forget coprocessor state..  	 */ +	tsk->fpu_counter = 0;  	clear_fpu(tsk);  	clear_used_math();  } @@ -649,8 +650,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();  	/*  |