/* Must be called with kernel preemption disabled (in this case, local interrupts are disabled at the call-site in entry.S).  */
asmlinkage void math_state_restore(void)
/* Must be called with kernel preemption disabled (in this case, local interrupts are disabled at the call-site in entry.S).  */
asmlinkage void math_state_restore(void)
{
	struct thread_info *thread = current_thread_info();
	struct task_struct *tsk = thread->task;
	if (!tsk_used_math(tsk)) {
		local_irq_enable();
		if (init_fpu(tsk)) {
			do_group_exit(SIGKILL);
			return;
		}
		local_irq_disable();
	}
	clts();
	__math_state_restore();
}