aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIngo Molnar2015-04-23 08:55:34 +0200
committerIngo Molnar2015-05-19 15:47:22 +0200
commitbfd6fc0581e7e2f3fa0b3e5e21cd6e54c3fbd16f (patch)
tree134db5ff7e3bcaea504f6725e9733b0408a30aed
parente102f30f4e22b7eb8f3dfbe7fec334cffb350fd8 (diff)
x86/fpu: Add debugging check to fpu_copy()
Also add a bit of documentation. Reviewed-by: Borislav Petkov <bp@alien8.de> Cc: Andy Lutomirski <luto@amacapital.net> Cc: Dave Hansen <dave.hansen@linux.intel.com> Cc: Fenghua Yu <fenghua.yu@intel.com> Cc: H. Peter Anvin <hpa@zytor.com> Cc: Linus Torvalds <torvalds@linux-foundation.org> Cc: Oleg Nesterov <oleg@redhat.com> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Thomas Gleixner <tglx@linutronix.de> Signed-off-by: Ingo Molnar <mingo@kernel.org>
-rw-r--r--arch/x86/kernel/fpu/core.c10
1 files changed, 10 insertions, 0 deletions
diff --git a/arch/x86/kernel/fpu/core.c b/arch/x86/kernel/fpu/core.c
index 2cc2380b95ce..3aeab3f12835 100644
--- a/arch/x86/kernel/fpu/core.c
+++ b/arch/x86/kernel/fpu/core.c
@@ -203,8 +203,18 @@ void fpstate_free(struct fpu *fpu)
}
EXPORT_SYMBOL_GPL(fpstate_free);
+/*
+ * Copy the current task's FPU state to a new task's FPU context.
+ *
+ * In the 'eager' case we just save to the destination context.
+ *
+ * In the 'lazy' case we save to the source context, mark the FPU lazy
+ * via stts() and copy the source context into the destination context.
+ */
static void fpu_copy(struct task_struct *dst, struct task_struct *src)
{
+ WARN_ON(src != current);
+
if (use_eager_fpu()) {
memset(&dst->thread.fpu.state->xsave, 0, xstate_size);
__save_fpu(dst);