Patchwork [v4,4/5] kvm: vmx: Skip all SYSCALL MSRs in setup_msrs() when !EFER.SCE

login
register
mail settings
Submitter Jim Mattson
Date Dec. 5, 2018, 11:29 p.m.
Message ID <20181205232902.1431-5-jmattson@google.com>
Download mbox | patch
Permalink /patch/673597/
State New
Headers show

Comments

Jim Mattson - Dec. 5, 2018, 11:29 p.m.
Like IA32_STAR, IA32_LSTAR and IA32_FMASK only need to contain guest
values on VM-entry when the guest is in long mode and EFER.SCE is set.

Signed-off-by: Jim Mattson <jmattson@google.com>
Reviewed-by: Peter Shier <pshier@google.com>
Reviewed-by: Marc Orr <marcorr@google.com>
---
 arch/x86/kvm/vmx.c | 16 ++++++++--------
 1 file changed, 8 insertions(+), 8 deletions(-)

Patch

diff --git a/arch/x86/kvm/vmx.c b/arch/x86/kvm/vmx.c
index 12430486e911e..7ae3842f659e2 100644
--- a/arch/x86/kvm/vmx.c
+++ b/arch/x86/kvm/vmx.c
@@ -3429,19 +3429,19 @@  static void setup_msrs(struct vcpu_vmx *vmx)
 
 	save_nmsrs = 0;
 #ifdef CONFIG_X86_64
-	if (is_long_mode(&vmx->vcpu)) {
-		index = __find_msr_index(vmx, MSR_SYSCALL_MASK);
+	/*
+	 * The SYSCALL MSRs are only needed on long mode guests, and only
+	 * when EFER.SCE is set.
+	 */
+	if (is_long_mode(&vmx->vcpu) && (vmx->vcpu.arch.efer & EFER_SCE)) {
+		index = __find_msr_index(vmx, MSR_STAR);
 		if (index >= 0)
 			move_msr_up(vmx, index, save_nmsrs++);
 		index = __find_msr_index(vmx, MSR_LSTAR);
 		if (index >= 0)
 			move_msr_up(vmx, index, save_nmsrs++);
-		/*
-		 * MSR_STAR is only needed on long mode guests, and only
-		 * if efer.sce is enabled.
-		 */
-		index = __find_msr_index(vmx, MSR_STAR);
-		if ((index >= 0) && (vmx->vcpu.arch.efer & EFER_SCE))
+		index = __find_msr_index(vmx, MSR_SYSCALL_MASK);
+		if (index >= 0)
 			move_msr_up(vmx, index, save_nmsrs++);
 	}
 #endif