Nested VMX: Clear bit 31 of IA32_VMX_BASIC MSR
authorYang Zhang <yang.z.zhang@Intel.com>
Tue, 10 Sep 2013 14:41:35 +0000 (16:41 +0200)
committerJan Beulich <jbeulich@suse.com>
Tue, 10 Sep 2013 14:41:35 +0000 (16:41 +0200)
The bit 31 of revision_id will set to 1 if vmcs shadowing enabled. And
according intel SDM, the bit 31 of IA32_VMX_BASIC MSR is always 0. So we
cannot set low 32 bit of IA32_VMX_BASIC to revision_id directly. Must clear
the bit 31 to 0.

Signed-off-by: Yang Zhang <yang.z.zhang@Intel.com>
Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
xen/arch/x86/hvm/vmx/vvmx.c

index 5ef5ad73851bca0e1e8b8505ca9c833d49fb1712..f385c02282715b651301cc4840b89134d3020c29 100644 (file)
@@ -1826,7 +1826,7 @@ int nvmx_msr_read_intercept(unsigned int msr, u64 *msr_content)
     switch (msr) {
     case MSR_IA32_VMX_BASIC:
         data = (host_data & (~0ul << 32)) |
-               ((v->arch.hvm_vmx.vmcs)->vmcs_revision_id);
+               (v->arch.hvm_vmx.vmcs->vmcs_revision_id & 0x7fffffff);
         break;
     case MSR_IA32_VMX_PINBASED_CTLS:
     case MSR_IA32_VMX_TRUE_PINBASED_CTLS: