x86, fpu: remove unnecessary user_fpu_end() in save_xstate_sig()
authorSuresh Siddha <suresh.b.siddha@intel.com>
Fri, 24 Aug 2012 21:12:58 +0000 (14:12 -0700)
committerH. Peter Anvin <hpa@linux.intel.com>
Tue, 18 Sep 2012 22:52:06 +0000 (15:52 -0700)
Few lines below we do drop_fpu() which is more safer. Remove the
unnecessary user_fpu_end() in save_xstate_sig(), which allows
the drop_fpu() to ignore any pending exceptions from the user-space
and drop the current fpu.

Signed-off-by: Suresh Siddha <suresh.b.siddha@intel.com>
Link: http://lkml.kernel.org/r/1345842782-24175-3-git-send-email-suresh.b.siddha@intel.com
Signed-off-by: H. Peter Anvin <hpa@linux.intel.com>
arch/x86/include/asm/fpu-internal.h
arch/x86/kernel/xsave.c

index 78169d133d4cf2681412d053552ab6c9390e49ac..52202a6b12aa523bb105a71fec231273c82a5ab4 100644 (file)
@@ -412,22 +412,11 @@ static inline void __drop_fpu(struct task_struct *tsk)
 }
 
 /*
- * The actual user_fpu_begin/end() functions
- * need to be preemption-safe.
+ * Need to be preemption-safe.
  *
- * NOTE! user_fpu_end() must be used only after you
- * have saved the FP state, and user_fpu_begin() must
- * be used only immediately before restoring it.
- * These functions do not do any save/restore on
- * their own.
+ * NOTE! user_fpu_begin() must be used only immediately before restoring
+ * it. This function does not do any save/restore on their own.
  */
-static inline void user_fpu_end(void)
-{
-       preempt_disable();
-       __thread_fpu_end(current);
-       preempt_enable();
-}
-
 static inline void user_fpu_begin(void)
 {
        preempt_disable();
index 07ddc870640b06e1ca3f37ed0ee3239df668c94f..4ac5f2e135b4bd4cc05eca518534068aa0ac17fc 100644 (file)
@@ -255,7 +255,6 @@ int save_xstate_sig(void __user *buf, void __user *buf_fx, int size)
                /* Update the thread's fxstate to save the fsave header. */
                if (ia32_fxstate)
                        fpu_fxsave(&tsk->thread.fpu);
-               user_fpu_end();
        } else {
                sanitize_i387_state(tsk);
                if (__copy_to_user(buf_fx, xsave, xstate_size))