diff options
author | Boris Ostrovsky <boris.ostrovsky@oracle.com> | 2015-11-19 16:55:45 -0500 |
---|---|---|
committer | Thomas Gleixner <tglx@linutronix.de> | 2015-12-19 03:55:52 -0500 |
commit | 91e2eea98f94a2ebb143d4c4cdeaa4573d62dc17 (patch) | |
tree | 87d864fc79de97b94589f5be731c6b7dbb270f7c /arch/x86/xen/enlighten.c | |
parent | d90167a941f62860f35eb960e1012aa2d30e7e94 (diff) |
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>
Diffstat (limited to 'arch/x86/xen/enlighten.c')
-rw-r--r-- | arch/x86/xen/enlighten.c | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/arch/x86/xen/enlighten.c b/arch/x86/xen/enlighten.c index 5774800ff583..d315151411e5 100644 --- a/arch/x86/xen/enlighten.c +++ b/arch/x86/xen/enlighten.c | |||
@@ -1886,8 +1886,10 @@ EXPORT_SYMBOL_GPL(xen_hvm_need_lapic); | |||
1886 | 1886 | ||
1887 | static void xen_set_cpu_features(struct cpuinfo_x86 *c) | 1887 | static void xen_set_cpu_features(struct cpuinfo_x86 *c) |
1888 | { | 1888 | { |
1889 | if (xen_pv_domain()) | 1889 | if (xen_pv_domain()) { |
1890 | clear_cpu_bug(c, X86_BUG_SYSRET_SS_ATTRS); | 1890 | clear_cpu_bug(c, X86_BUG_SYSRET_SS_ATTRS); |
1891 | set_cpu_cap(c, X86_FEATURE_XENPV); | ||
1892 | } | ||
1891 | } | 1893 | } |
1892 | 1894 | ||
1893 | const struct hypervisor_x86 x86_hyper_xen = { | 1895 | const struct hypervisor_x86 x86_hyper_xen = { |