|
@@ -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:
|