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

[Xen-devel] [XTF PATCH 03/16] vvmx: test whether MSR_IA32_VMX_BASIC is set correctly



It tests whether bit 31 and bit 48 are 0, and VMCS size is in the
range (0, 4096].

Signed-off-by: Haozhong Zhang <haozhong.zhang@xxxxxxxxx>
---
 include/arch/x86/msr-index.h |  4 ++++
 tests/vvmx/msr.c             | 47 ++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 51 insertions(+)

diff --git a/include/arch/x86/msr-index.h b/include/arch/x86/msr-index.h
index f9867d5..b7aeef0 100644
--- a/include/arch/x86/msr-index.h
+++ b/include/arch/x86/msr-index.h
@@ -16,6 +16,10 @@
 #define _MSR_MISC_FEATURES_CPUID_FAULTING        0
 #define MSR_MISC_FEATURES_CPUID_FAULTING         (1ULL << 
_MSR_MISC_FEATURES_CPUID_FAULTING)
 
+#define MSR_IA32_VMX_BASIC              0x00000480
+#define VMX_BASIC_VMCS_SIZE_MASK        (0x1fffULL << 32)
+#define VMX_BASIC_32BIT_ADDRESSES       (1ULL << 48)
+
 #define MSR_EFER                        0xc0000080 /* Extended Feature 
register. */
 #define _EFER_SCE                       0  /* SYSCALL Enable. */
 #define EFER_SCE                        (_AC(1, L) << _EFER_SCE)
diff --git a/tests/vvmx/msr.c b/tests/vvmx/msr.c
index 100491d..ad01f26 100644
--- a/tests/vvmx/msr.c
+++ b/tests/vvmx/msr.c
@@ -48,11 +48,58 @@ static bool test_msr_feature_control(void)
     return passed;
 }
 
+static bool test_msr_vmx_basic(void)
+{
+    bool passed = true;
+    uint64_t vmx_basic;
+    uint64_t vmcs_size;
+
+    if ( rdmsr_safe(MSR_IA32_VMX_BASIC, &vmx_basic) )
+    {
+        xtf_failure("Fail: fault when rdmsr MSR_IA32_VMX_BASIC\n");
+        passed = false;
+        goto out;
+    }
+
+    if ( vmx_basic & (1ULL << 31) )
+    {
+        xtf_failure("Fail: MSR_IA32_VMX_BASIC[31] is not 0\n");
+        passed = false;
+    }
+
+    vmcs_size = (vmx_basic & VMX_BASIC_VMCS_SIZE_MASK) >> 32;
+    if ( vmcs_size > PAGE_SIZE )
+    {
+        xtf_failure("Fail: "
+                    "VMCS size (%"PRIu64") in MSR_IA32_VMX_BASIC is > %ld\n",
+                    vmcs_size, PAGE_SIZE);
+        passed = false;
+    }
+    else if ( vmcs_size == 0 )
+    {
+        xtf_failure("Fail: VMCS size in MSR_IA32_VMX_BASIC cannot be 0\n");
+        passed = false;
+    }
+
+    /* test is running on hvm64, so this bit should be 0 */
+    if ( vmx_basic & VMX_BASIC_32BIT_ADDRESSES )
+    {
+        xtf_failure("Fail: MSR_IA32_VMX_BASIC[48] is not 0\n");
+        passed = false;
+    }
+
+out:
+    return passed;
+}
+
 bool test_msr_vmx(void)
 {
     if ( !test_msr_feature_control() )
         return false;
 
+    if ( !test_msr_vmx_basic() )
+        return false;
+
     return true;
 }
 
-- 
2.10.1


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

 


Rackspace

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