[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] [PATCH] xen/x86: Adjust stack pointer in xen_sysexit



On 11/16/2015 04:55 PM, H. Peter Anvin wrote:
On 11/16/15 12:22, Borislav Petkov wrote:
Huh, so what's wrong with a jump:

        jmp 1f
        swapgs
        1:

What is the point of that jump?

If it would make you feel better, it could be X86_BUG_XENPV :-p
That doesn't matter - I just don't want to open the flood gates on
pseudo feature bits.

hpa, what do you think?
Pseudo feature bits are fine, we already have plenty of them.  They make
sense as they let us reuse a lot of infrastructure.


So how about something like this? And then I think we can remove usergs_sysret32 and irq_enable_sysexit pv ops completely as noone will use them (lguest doesn't set them)

diff --git a/arch/x86/entry/entry_32.S b/arch/x86/entry/entry_32.S
index 3eb572e..c43df7b 100644
--- a/arch/x86/entry/entry_32.S
+++ b/arch/x86/entry/entry_32.S
@@ -308,7 +308,8 @@ sysenter_past_esp:

        movl    %esp, %eax
        call    do_fast_syscall_32
-       testl   %eax, %eax
+       /* PV guests always use IRET path */
+ ALTERNATIVE "testl %eax, %eax", "jmp .Lsyscall_32_done", X86_FEATURE_PV
        jz      .Lsyscall_32_done

 /* Opportunistic SYSEXIT */
diff --git a/arch/x86/entry/entry_64_compat.S b/arch/x86/entry/entry_64_compat.S
index c320183..2d1bc82 100644
--- a/arch/x86/entry/entry_64_compat.S
+++ b/arch/x86/entry/entry_64_compat.S
@@ -121,7 +121,7 @@ sysenter_flags_fixed:

        movq    %rsp, %rdi
        call    do_fast_syscall_32
-       testl   %eax, %eax
+ ALTERNATIVE "testl %eax, %eax", "jmp .Lsyscall_32_done", X86_FEATURE_PV
        jz      .Lsyscall_32_done
        jmp     sysret32_from_system_call

@@ -200,7 +200,8 @@ ENTRY(entry_SYSCALL_compat)

        movq    %rsp, %rdi
        call    do_fast_syscall_32
-       testl   %eax, %eax
+       /* PV guests always use IRET path */
+ ALTERNATIVE "testl %eax, %eax", "jmp .Lsyscall_32_done", X86_FEATURE_PV
        jz      .Lsyscall_32_done

        /* Opportunistic SYSRET */
diff --git a/arch/x86/include/asm/cpufeature.h b/arch/x86/include/asm/cpufeature.h
index e4f8010..723327b 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_PV          ( 8*32+16) /* Paravirtual guest */


 /* Intel-defined CPU features, CPUID level 0x00000007:0 (ebx), word 9 */



_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.