Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit fcb2ac5b authored by Jiri Slaby's avatar Jiri Slaby Committed by Ingo Molnar
Browse files

x86_32: introduce restore_fpu_checking()



Impact: cleanup, prepare FPU code unificaton

Like on x86_64, return an error from restore_fpu and kill the task
if it fails.

Also rename restore_fpu to restore_fpu_checking which allows ifdefs
to be removed in math_state_restore().

Signed-off-by: default avatarJiri Slaby <jirislaby@gmail.com>
LKML-Reference: <1239190320-23952-1-git-send-email-jirislaby@gmail.com>
Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
parent 577c9c45
Loading
Loading
Loading
Loading
+4 −5
Original line number Diff line number Diff line
@@ -185,12 +185,10 @@ static inline void tolerant_fwait(void)
	asm volatile("fnclex ; fwait");
}

static inline void restore_fpu(struct task_struct *tsk)
static inline int restore_fpu_checking(struct task_struct *tsk)
{
	if (task_thread_info(tsk)->status & TS_XSAVE) {
		xrstor_checking(&tsk->thread.xstate->xsave);
		return;
	}
	if (task_thread_info(tsk)->status & TS_XSAVE)
		return xrstor_checking(&tsk->thread.xstate->xsave);
	/*
	 * The "nop" is needed to make the instructions the same
	 * length.
@@ -200,6 +198,7 @@ static inline void restore_fpu(struct task_struct *tsk)
		"fxrstor %1",
		X86_FEATURE_FXSR,
		"m" (tsk->thread.xstate->fxsave));
	return 0;
}

/* We need a safe address that is cheap to find and that is already
+1 −4
Original line number Diff line number Diff line
@@ -839,9 +839,6 @@ asmlinkage void math_state_restore(void)
	}

	clts();				/* Allow maths ops (or we recurse) */
#ifdef CONFIG_X86_32
	restore_fpu(tsk);
#else
	/*
	 * Paranoid restore. send a SIGSEGV if we fail to restore the state.
	 */
@@ -850,7 +847,7 @@ asmlinkage void math_state_restore(void)
		force_sig(SIGSEGV, tsk);
		return;
	}
#endif

	thread->status |= TS_USEDFPU;	/* So we fnsave on switch_to() */
	tsk->fpu_counter++;
}