From: tip-bot for Boris Ostrovsky <tipbot@zytor.com>
To: linux-tip-commits@vger.kernel.org
Cc: luto@kernel.org, torvalds@linux-foundation.org, mingo@kernel.org,
hpa@zytor.com, peterz@infradead.org, akpm@linux-foundation.org,
linux-kernel@vger.kernel.org, dvlasenk@redhat.com,
luto@amacapital.net, bp@suse.de, brgerst@gmail.com, bp@alien8.de,
boris.ostrovsky@oracle.com, tglx@linutronix.de
Subject: [tip:x86/urgent] x86/xen: Avoid fast syscall path for Xen PV guests
Date: Sat, 19 Dec 2015 01:15:58 -0800 [thread overview]
Message-ID: <tip-91e2eea98f94a2ebb143d4c4cdeaa4573d62dc17@git.kernel.org> (raw)
In-Reply-To: <1447970147-1733-2-git-send-email-boris.ostrovsky@oracle.com>
Commit-ID: 91e2eea98f94a2ebb143d4c4cdeaa4573d62dc17
Gitweb: http://git.kernel.org/tip/91e2eea98f94a2ebb143d4c4cdeaa4573d62dc17
Author: Boris Ostrovsky <boris.ostrovsky@oracle.com>
AuthorDate: Thu, 19 Nov 2015 16:55:45 -0500
Committer: Thomas Gleixner <tglx@linutronix.de>
CommitDate: Sat, 19 Dec 2015 09:55:52 +0100
x86/xen: Avoid fast syscall path for Xen PV guests
After 32-bit syscall rewrite, and specifically after commit:
5f310f739b4c ("x86/entry/32: Re-implement SYSENTER using the new C path")
... the stack frame that is passed to xen_sysexit is no longer a
"standard" one (i.e. it's not pt_regs).
Since we end up calling xen_iret from xen_sysexit we don't need
to fix up the stack and instead follow entry_SYSENTER_32's IRET
path directly to xen_iret.
We can do the same thing for compat mode even though stack does
not need to be fixed. This will allow us to drop usergs_sysret32
paravirt op (in the subsequent patch)
Suggested-by: Andy Lutomirski <luto@amacapital.net>
Signed-off-by: Boris Ostrovsky <boris.ostrovsky@oracle.com>
Reviewed-by: Borislav Petkov <bp@suse.de>
Acked-by: Andy Lutomirski <luto@kernel.org>
Cc: Andrew Morton <akpm@linux-foundation.org>
Cc: Borislav Petkov <bp@alien8.de>
Cc: Brian Gerst <brgerst@gmail.com>
Cc: Denys Vlasenko <dvlasenk@redhat.com>
Cc: H. Peter Anvin <hpa@zytor.com>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: david.vrabel@citrix.com
Cc: konrad.wilk@oracle.com
Cc: virtualization@lists.linux-foundation.org
Cc: xen-devel@lists.xenproject.org
Link: http://lkml.kernel.org/r/1447970147-1733-2-git-send-email-boris.ostrovsky@oracle.com
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
---
arch/x86/entry/entry_32.S | 5 +++--
arch/x86/entry/entry_64_compat.S | 10 ++++++----
arch/x86/include/asm/cpufeature.h | 1 +
arch/x86/xen/enlighten.c | 4 +++-
4 files changed, 13 insertions(+), 7 deletions(-)
diff --git a/arch/x86/entry/entry_32.S b/arch/x86/entry/entry_32.S
index 3eb572e..0870825 100644
--- a/arch/x86/entry/entry_32.S
+++ b/arch/x86/entry/entry_32.S
@@ -308,8 +308,9 @@ sysenter_past_esp:
movl %esp, %eax
call do_fast_syscall_32
- testl %eax, %eax
- jz .Lsyscall_32_done
+ /* XEN PV guests always use IRET path */
+ ALTERNATIVE "testl %eax, %eax; jz .Lsyscall_32_done", \
+ "jmp .Lsyscall_32_done", X86_FEATURE_XENPV
/* Opportunistic SYSEXIT */
TRACE_IRQS_ON /* User mode traces as IRQs on. */
diff --git a/arch/x86/entry/entry_64_compat.S b/arch/x86/entry/entry_64_compat.S
index c320183..402e34a 100644
--- a/arch/x86/entry/entry_64_compat.S
+++ b/arch/x86/entry/entry_64_compat.S
@@ -121,8 +121,9 @@ sysenter_flags_fixed:
movq %rsp, %rdi
call do_fast_syscall_32
- testl %eax, %eax
- jz .Lsyscall_32_done
+ /* XEN PV guests always use IRET path */
+ ALTERNATIVE "testl %eax, %eax; jz .Lsyscall_32_done", \
+ "jmp .Lsyscall_32_done", X86_FEATURE_XENPV
jmp sysret32_from_system_call
sysenter_fix_flags:
@@ -200,8 +201,9 @@ ENTRY(entry_SYSCALL_compat)
movq %rsp, %rdi
call do_fast_syscall_32
- testl %eax, %eax
- jz .Lsyscall_32_done
+ /* XEN PV guests always use IRET path */
+ ALTERNATIVE "testl %eax, %eax; jz .Lsyscall_32_done", \
+ "jmp .Lsyscall_32_done", X86_FEATURE_XENPV
/* Opportunistic SYSRET */
sysret32_from_system_call:
diff --git a/arch/x86/include/asm/cpufeature.h b/arch/x86/include/asm/cpufeature.h
index e4f8010..f7ba9fb 100644
--- a/arch/x86/include/asm/cpufeature.h
+++ b/arch/x86/include/asm/cpufeature.h
@@ -216,6 +216,7 @@
#define X86_FEATURE_PAUSEFILTER ( 8*32+13) /* AMD filtered pause intercept */
#define X86_FEATURE_PFTHRESHOLD ( 8*32+14) /* AMD pause filter threshold */
#define X86_FEATURE_VMMCALL ( 8*32+15) /* Prefer vmmcall to vmcall */
+#define X86_FEATURE_XENPV ( 8*32+16) /* "" Xen paravirtual guest */
/* Intel-defined CPU features, CPUID level 0x00000007:0 (ebx), word 9 */
diff --git a/arch/x86/xen/enlighten.c b/arch/x86/xen/enlighten.c
index 5774800..d315151 100644
--- a/arch/x86/xen/enlighten.c
+++ b/arch/x86/xen/enlighten.c
@@ -1886,8 +1886,10 @@ EXPORT_SYMBOL_GPL(xen_hvm_need_lapic);
static void xen_set_cpu_features(struct cpuinfo_x86 *c)
{
- if (xen_pv_domain())
+ if (xen_pv_domain()) {
clear_cpu_bug(c, X86_BUG_SYSRET_SS_ATTRS);
+ set_cpu_cap(c, X86_FEATURE_XENPV);
+ }
}
const struct hypervisor_x86 x86_hyper_xen = {
next prev parent reply other threads:[~2015-12-19 9:17 UTC|newest]
Thread overview: 39+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-11-19 21:55 [PATCH v2 0/3] Fix and cleanup for 32-bit PV sysexit Boris Ostrovsky
2015-11-19 21:55 ` Boris Ostrovsky
2015-11-19 21:55 ` [PATCH v2 1/3] x86/xen: Avoid fast syscall path for Xen PV guests Boris Ostrovsky
2015-11-19 21:55 ` Boris Ostrovsky
2015-11-23 16:28 ` [tip:x86/asm] " tip-bot for Boris Ostrovsky
2015-12-15 15:21 ` [PATCH v2 1/3] " Boris Ostrovsky
2015-12-15 15:21 ` Boris Ostrovsky
2015-12-15 15:21 ` Boris Ostrovsky
2015-12-15 15:48 ` Borislav Petkov
2015-12-15 15:48 ` Borislav Petkov
2015-12-15 15:54 ` Boris Ostrovsky
2015-12-15 15:54 ` Boris Ostrovsky
2015-12-15 15:57 ` Andy Lutomirski
2015-12-15 15:57 ` Andy Lutomirski
2015-12-15 15:57 ` Andy Lutomirski
2015-12-15 15:54 ` Boris Ostrovsky
2015-12-15 15:48 ` Borislav Petkov
2015-12-19 9:15 ` tip-bot for Boris Ostrovsky [this message]
2015-11-19 21:55 ` Boris Ostrovsky
2015-11-19 21:55 ` [PATCH v2 2/3] x86: irq_enable_sysexit pv op is no longer needed Boris Ostrovsky
2015-11-19 21:55 ` Boris Ostrovsky
2015-11-23 16:28 ` [tip:x86/asm] x86/paravirt: Remove the unused irq_enable_sysexit pv op tip-bot for Boris Ostrovsky
2015-11-19 21:55 ` [PATCH v2 2/3] x86: irq_enable_sysexit pv op is no longer needed Boris Ostrovsky
2015-11-19 21:55 ` [PATCH v2 3/3] x86: usergs_sysret32 " Boris Ostrovsky
2015-11-19 21:55 ` Boris Ostrovsky
2015-11-19 21:55 ` Boris Ostrovsky
2015-11-23 16:29 ` [tip:x86/asm] x86/entry, x86/paravirt: Remove the unused usergs_sysret32 PV op tip-bot for Boris Ostrovsky
2015-11-19 22:07 ` [PATCH v2 0/3] Fix and cleanup for 32-bit PV sysexit Andy Lutomirski
2015-11-19 22:07 ` Andy Lutomirski
2015-12-15 20:40 ` [Xen-devel] " Andrew Cooper
2015-12-15 20:40 ` Andrew Cooper
2015-12-15 21:27 ` Andy Lutomirski
2015-12-15 21:27 ` [Xen-devel] " Andy Lutomirski
2015-12-15 21:27 ` Andy Lutomirski
2015-12-15 20:40 ` Andrew Cooper
2015-11-19 22:07 ` Andy Lutomirski
2015-11-19 23:02 ` Borislav Petkov
2015-11-19 23:02 ` Borislav Petkov
2015-11-19 23:02 ` Borislav Petkov
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=tip-91e2eea98f94a2ebb143d4c4cdeaa4573d62dc17@git.kernel.org \
--to=tipbot@zytor.com \
--cc=akpm@linux-foundation.org \
--cc=boris.ostrovsky@oracle.com \
--cc=bp@alien8.de \
--cc=bp@suse.de \
--cc=brgerst@gmail.com \
--cc=dvlasenk@redhat.com \
--cc=hpa@zytor.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-tip-commits@vger.kernel.org \
--cc=luto@amacapital.net \
--cc=luto@kernel.org \
--cc=mingo@kernel.org \
--cc=peterz@infradead.org \
--cc=tglx@linutronix.de \
--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.