From: Oleg Nesterov <oleg@redhat.com>
To: Dave Hansen <dave.hansen@intel.com>, Borislav Petkov <bp@suse.de>,
Ingo Molnar <mingo@kernel.org>
Cc: Andy Lutomirski <luto@amacapital.net>,
Linus Torvalds <torvalds@linux-foundation.org>,
Pekka Riikonen <priikone@iki.fi>, Rik van Riel <riel@redhat.com>,
Suresh Siddha <sbsiddha@gmail.com>,
LKML <linux-kernel@vger.kernel.org>,
"Yu, Fenghua" <fenghua.yu@intel.com>,
Quentin Casasnovas <quentin.casasnovas@oracle.com>,
"H. Peter Anvin" <hpa@zytor.com>
Subject: [PATCH RFC 2/2] x86/fpu: change xsave_user() and xrestore_user() to use __user_insn()
Date: Sun, 15 Mar 2015 17:50:36 +0100 [thread overview]
Message-ID: <20150315165036.GC28149@redhat.com> (raw)
In-Reply-To: <20150315164948.GA28149@redhat.com>
Change xsave_user() and xrestore_user() to avoid the (imho) horrible
and should-die xstate_fault helper, they both can use __user_insn().
This also removes the "memory" clobber but I think it was never needed.
xrestore_user() doesn't change the memory, it only changes the FPU regs.
xsave_user() does write to "*buf" but this memory is "__user", we must
never access it directly.
This patch adds '"=m" (*buf)' in both cases, but this is only because
currently __user_insn() needs the non-empty "output" arg.
Note: I think we can change all other xstate_fault users too, including
alternative_input's.
Signed-off-by: Oleg Nesterov <oleg@redhat.com>
---
arch/x86/include/asm/xsave.h | 19 +++++--------------
1 files changed, 5 insertions(+), 14 deletions(-)
diff --git a/arch/x86/include/asm/xsave.h b/arch/x86/include/asm/xsave.h
index 5fa9770..441f171 100644
--- a/arch/x86/include/asm/xsave.h
+++ b/arch/x86/include/asm/xsave.h
@@ -229,12 +229,8 @@ static inline int xsave_user(struct xsave_struct __user *buf)
if (unlikely(err))
return -EFAULT;
- __asm__ __volatile__(ASM_STAC "\n"
- "1:"XSAVE"\n"
- "2: " ASM_CLAC "\n"
- xstate_fault
- : "D" (buf), "a" (-1), "d" (-1), "0" (0)
- : "memory");
+ err = __user_insn(XSAVE, "=m" (*buf), /* unneeded */
+ "D" (buf), "a" (-1), "d" (-1));
return err;
}
@@ -243,17 +239,12 @@ static inline int xsave_user(struct xsave_struct __user *buf)
*/
static inline int xrestore_user(struct xsave_struct __user *buf, u64 mask)
{
- int err = 0;
- struct xsave_struct *xstate = ((__force struct xsave_struct *)buf);
u32 lmask = mask;
u32 hmask = mask >> 32;
+ int err;
- __asm__ __volatile__(ASM_STAC "\n"
- "1:"XRSTOR"\n"
- "2: " ASM_CLAC "\n"
- xstate_fault
- : "D" (xstate), "a" (lmask), "d" (hmask), "0" (0)
- : "memory"); /* memory required? */
+ err = __user_insn(XRSTOR, "=m" (*buf), /* unneeded */
+ "D" (buf), "a" (lmask), "d" (hmask));
return err;
}
--
1.5.5.1
next prev parent reply other threads:[~2015-03-15 16:52 UTC|newest]
Thread overview: 126+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-03-04 18:30 Oops with tip/x86/fpu Dave Hansen
2015-03-04 19:06 ` Oleg Nesterov
2015-03-04 19:12 ` Dave Hansen
2015-03-04 20:06 ` Borislav Petkov
2015-03-05 15:14 ` Oleg Nesterov
[not found] ` <20150305182203.GA4203@redhat.com>
2015-03-05 18:34 ` Dave Hansen
2015-03-05 18:46 ` Oleg Nesterov
2015-03-05 18:41 ` Dave Hansen
2015-03-26 22:37 ` Yu, Fenghua
2015-03-26 22:43 ` Dave Hansen
2015-03-26 22:48 ` Yu, Fenghua
2015-03-27 7:30 ` Quentin Casasnovas
2015-03-27 19:06 ` Oleg Nesterov
2015-03-05 8:38 ` Quentin Casasnovas
2015-03-05 15:13 ` Oleg Nesterov
2015-03-05 18:42 ` Borislav Petkov
2015-03-05 22:16 ` Dave Hansen
2015-03-05 19:51 ` [PATCH 0/1] x86/fpu: math_state_restore() should not blindly disable irqs Oleg Nesterov
2015-03-05 19:51 ` [PATCH 1/1] " Oleg Nesterov
2015-03-05 20:11 ` Ingo Molnar
2015-03-05 21:25 ` Oleg Nesterov
2015-03-06 7:58 ` Ingo Molnar
2015-03-06 13:26 ` Oleg Nesterov
2015-03-06 13:39 ` Oleg Nesterov
2015-03-06 13:46 ` Ingo Molnar
2015-03-06 14:01 ` Oleg Nesterov
2015-03-06 14:17 ` Oleg Nesterov
2015-03-06 15:00 ` David Vrabel
2015-03-06 15:36 ` Oleg Nesterov
2015-03-06 16:15 ` David Vrabel
2015-03-06 16:31 ` Oleg Nesterov
2015-03-06 17:33 ` Linus Torvalds
2015-03-06 18:15 ` Oleg Nesterov
2015-03-06 19:23 ` Andy Lutomirski
2015-03-06 22:00 ` Linus Torvalds
2015-03-06 22:28 ` Andy Lutomirski
2015-03-07 10:36 ` Ingo Molnar
2015-03-07 20:11 ` Linus Torvalds
2015-03-08 8:55 ` Ingo Molnar
2015-03-08 11:38 ` Ingo Molnar
2015-03-08 13:59 ` Andy Lutomirski
2015-03-08 14:38 ` Andy Lutomirski
2015-03-07 10:32 ` Ingo Molnar
2015-03-07 15:38 ` [PATCH 0/1] x86/fpu: x86/fpu: avoid math_state_restore() without used_math() in __restore_xstate_sig() Oleg Nesterov
2015-03-07 15:38 ` [PATCH 1/1] " Oleg Nesterov
2015-03-09 14:07 ` Borislav Petkov
2015-03-09 14:34 ` Oleg Nesterov
2015-03-09 15:18 ` Borislav Petkov
2015-03-09 16:24 ` Oleg Nesterov
2015-03-09 16:53 ` Borislav Petkov
2015-03-09 17:05 ` Oleg Nesterov
2015-03-09 17:23 ` Borislav Petkov
2015-03-16 12:07 ` [tip:x86/urgent] x86/fpu: Avoid " tip-bot for Oleg Nesterov
2015-03-05 20:35 ` [PATCH 0/1] x86/fpu: math_state_restore() should not blindly disable irqs Oleg Nesterov
2015-03-09 17:10 ` [PATCH] x86/fpu: drop_fpu() should not assume that tsk == current Oleg Nesterov
2015-03-09 17:36 ` Rik van Riel
2015-03-09 17:48 ` Borislav Petkov
2015-03-09 18:06 ` Oleg Nesterov
2015-03-09 18:10 ` Borislav Petkov
2015-03-16 12:07 ` [tip:x86/urgent] x86/fpu: Drop_fpu() should not assume that tsk equals current tip-bot for Oleg Nesterov
2015-03-11 17:33 ` [PATCH 0/4] x86/fpu: avoid math_state_restore() on kthread exec Oleg Nesterov
2015-03-11 17:34 ` [PATCH 1/4] x86/fpu: document user_fpu_begin() Oleg Nesterov
2015-03-13 9:47 ` Borislav Petkov
2015-03-13 14:34 ` Oleg Nesterov
2015-03-23 12:20 ` [tip:x86/fpu] x86/fpu: Document user_fpu_begin() tip-bot for Oleg Nesterov
2015-03-11 17:34 ` [PATCH 2/4] x86/fpu: introduce restore_init_xstate() Oleg Nesterov
2015-03-13 10:34 ` Borislav Petkov
2015-03-13 14:39 ` Oleg Nesterov
2015-03-13 15:20 ` Borislav Petkov
2015-03-16 19:05 ` Rik van Riel
2015-03-23 12:20 ` [tip:x86/fpu] x86/fpu: Introduce restore_init_xstate() tip-bot for Oleg Nesterov
2015-03-11 17:34 ` [PATCH 3/4] x86/fpu: use restore_init_xstate() instead of math_state_restore() on kthread exec Oleg Nesterov
2015-03-13 10:48 ` Borislav Petkov
2015-03-13 14:45 ` Oleg Nesterov
2015-03-13 15:51 ` Borislav Petkov
2015-03-23 12:21 ` [tip:x86/fpu] x86/fpu: Use " tip-bot for Oleg Nesterov
2015-03-11 17:35 ` [PATCH 4/4] x86/fpu: don't abuse drop_init_fpu() in flush_thread() Oleg Nesterov
2015-03-13 10:52 ` Borislav Petkov
2015-03-13 14:55 ` Oleg Nesterov
2015-03-13 16:19 ` Borislav Petkov
2015-03-13 16:26 ` Oleg Nesterov
2015-03-13 19:27 ` Borislav Petkov
2015-03-14 14:48 ` Oleg Nesterov
2015-03-15 17:36 ` Borislav Petkov
2015-03-15 18:16 ` Oleg Nesterov
2015-03-15 18:50 ` Borislav Petkov
2015-03-15 20:04 ` Oleg Nesterov
2015-03-15 20:38 ` Borislav Petkov
2015-03-16 9:35 ` Borislav Petkov
2015-03-16 10:28 ` Ingo Molnar
2015-03-16 14:39 ` Oleg Nesterov
2015-03-16 15:26 ` Borislav Petkov
2015-03-16 15:34 ` Andy Lutomirski
2015-03-16 15:35 ` Borislav Petkov
2015-03-13 17:30 ` [PATCH v2 " Oleg Nesterov
2015-03-14 10:55 ` Borislav Petkov
2015-03-14 10:57 ` [PATCH] x86/fpu: Fold __drop_fpu() into its sole user Borislav Petkov
2015-03-14 15:15 ` Oleg Nesterov
2015-03-16 10:27 ` Ingo Molnar
2015-03-23 12:21 ` [tip:x86/fpu] x86/fpu: Don't abuse drop_init_fpu() in flush_thread() tip-bot for Oleg Nesterov
2015-03-13 18:26 ` [PATCH 0/1] x86/cpu: don't allocate fpu->state for swapper/0 Oleg Nesterov
2015-03-13 18:27 ` [PATCH 1/1] " Oleg Nesterov
2015-03-16 10:18 ` Borislav Petkov
2015-03-23 12:22 ` [tip:x86/fpu] x86/fpu: Don't " tip-bot for Oleg Nesterov
2015-03-14 11:16 ` [PATCH 0/1] x86/cpu: don't " Borislav Petkov
2015-03-14 15:13 ` [PATCH 0/1] x86/cpu: kill eager_fpu_init_bp() Oleg Nesterov
2015-03-14 15:13 ` [PATCH 1/1] " Oleg Nesterov
2015-03-16 12:44 ` Borislav Petkov
2015-03-23 12:22 ` [tip:x86/fpu] x86/fpu: Kill eager_fpu_init_bp() tip-bot for Oleg Nesterov
2015-03-15 16:49 ` [PATCH RFC 0/2] x86/fpu: avoid "xstate_fault" in xsave_user/xrestore_user Oleg Nesterov
2015-03-15 16:50 ` [PATCH RFC 1/2] x86: introduce __user_insn() and __check_insn() Oleg Nesterov
2015-03-15 16:50 ` Oleg Nesterov [this message]
2015-03-16 22:43 ` [PATCH RFC 2/2] x86/fpu: change xsave_user() and xrestore_user() to use __user_insn() Quentin Casasnovas
2015-03-17 9:35 ` Borislav Petkov
2015-03-16 14:36 ` [PATCH RFC 0/2] x86/fpu: avoid "xstate_fault" in xsave_user/xrestore_user Borislav Petkov
2015-03-16 14:57 ` Oleg Nesterov
2015-03-16 17:58 ` Borislav Petkov
2015-03-16 22:37 ` Quentin Casasnovas
2015-03-17 9:47 ` Borislav Petkov
2015-03-17 10:00 ` Quentin Casasnovas
2015-03-17 11:20 ` Borislav Petkov
2015-03-17 11:36 ` Quentin Casasnovas
2015-03-17 12:07 ` Borislav Petkov
2015-03-18 9:06 ` Quentin Casasnovas
2015-03-18 9:53 ` Borislav Petkov
2015-03-17 10:07 ` Quentin Casasnovas
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20150315165036.GC28149@redhat.com \
--to=oleg@redhat.com \
--cc=bp@suse.de \
--cc=dave.hansen@intel.com \
--cc=fenghua.yu@intel.com \
--cc=hpa@zytor.com \
--cc=linux-kernel@vger.kernel.org \
--cc=luto@amacapital.net \
--cc=mingo@kernel.org \
--cc=priikone@iki.fi \
--cc=quentin.casasnovas@oracle.com \
--cc=riel@redhat.com \
--cc=sbsiddha@gmail.com \
--cc=torvalds@linux-foundation.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.