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

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



Guest MSR_IA32_FEATURE_CONTROL is set by Xen hypervisor instead by
guest firmware or hvmloader, so this test instead checks whether bits
in MSR_IA32_FEATURE_CONTROL are set correctly, rather than requiring
they are all zeroed.

Signed-off-by: Haozhong Zhang <haozhong.zhang@xxxxxxxxx>
---
 include/arch/x86/msr-index.h |  5 ++++
 tests/vvmx/Makefile          |  2 +-
 tests/vvmx/main.c            |  4 +++
 tests/vvmx/msr.c             | 67 ++++++++++++++++++++++++++++++++++++++++++++
 4 files changed, 77 insertions(+), 1 deletion(-)
 create mode 100644 tests/vvmx/msr.c

diff --git a/include/arch/x86/msr-index.h b/include/arch/x86/msr-index.h
index d479239..f9867d5 100644
--- a/include/arch/x86/msr-index.h
+++ b/include/arch/x86/msr-index.h
@@ -3,6 +3,11 @@
 
 #include <xtf/numbers.h>
 
+#define MSR_IA32_FEATURE_CONTROL        0x0000003a
+#define IA32_FEATURE_CONTROL_LOCK                     0x0001
+#define IA32_FEATURE_CONTROL_ENABLE_VMXON_INSIDE_SMX  0x0002
+#define IA32_FEATURE_CONTROL_ENABLE_VMXON_OUTSIDE_SMX 0x0004
+
 #define MSR_INTEL_PLATFORM_INFO         0x000000ce
 #define _MSR_PLATFORM_INFO_CPUID_FAULTING       31
 #define MSR_PLATFORM_INFO_CPUID_FAULTING        (1ULL << 
_MSR_PLATFORM_INFO_CPUID_FAULTING)
diff --git a/tests/vvmx/Makefile b/tests/vvmx/Makefile
index 80a6629..54769fa 100644
--- a/tests/vvmx/Makefile
+++ b/tests/vvmx/Makefile
@@ -6,6 +6,6 @@ TEST-ENVS := hvm64
 
 TEST-EXTRA-CFG := extra.cfg.in
 
-obj-perenv += main.o cpuid.o
+obj-perenv += main.o cpuid.o msr.o
 
 include $(ROOT)/build/gen.mk
diff --git a/tests/vvmx/main.c b/tests/vvmx/main.c
index 8506b7b..bd36f10 100644
--- a/tests/vvmx/main.c
+++ b/tests/vvmx/main.c
@@ -14,6 +14,7 @@
 const char test_title[] = "Test vvmx";
 
 extern bool test_cpuid_vmx_feat(void);
+extern bool test_msr_vmx(void);
 
 void test_main(void)
 {
@@ -26,6 +27,9 @@ void test_main(void)
     if ( !test_cpuid_vmx_feat() )
         goto fail;
 
+    if ( !test_msr_vmx() )
+        goto fail;
+
     xtf_success(NULL);
     return;
 
diff --git a/tests/vvmx/msr.c b/tests/vvmx/msr.c
new file mode 100644
index 0000000..100491d
--- /dev/null
+++ b/tests/vvmx/msr.c
@@ -0,0 +1,67 @@
+#include <xtf.h>
+
+#include <arch/x86/msr-index.h>
+
+/*
+ * NB. Guest MSR_IA32_FEATURE_CONTROL is set by Xen hypervisor instead
+ * by guest firmware or hvmloader, so this test checks whether bits in
+ * MSR_IA32_FEATURE_CONTROL are set correctly and does not require they
+ * are all zero.
+ *
+ * TODO: If the behavior in above NB is changed in future, remember to
+ * adjust this test.
+ */
+static bool test_msr_feature_control(void)
+{
+    bool passed = true;
+    uint32_t cpuid_feat_ecx = cpuid_ecx(1);
+    uint64_t msr_feat_ctrl;
+
+    if ( rdmsr_safe(MSR_IA32_FEATURE_CONTROL, &msr_feat_ctrl) )
+    {
+        xtf_failure("Fail: fault when rdmsr MSR_IA32_FEATURE_CONTROL\n");
+        passed = false;
+        goto out;
+    }
+
+    if ( (msr_feat_ctrl & IA32_FEATURE_CONTROL_ENABLE_VMXON_INSIDE_SMX) &&
+         !(cpuid_feat_ecx & X86_FEATURE_SMX) )
+    {
+        xtf_failure("Fail: MSR_IA32_FEATURE_CONTROL[1] is set "
+                    "but SMX is not supported\n");
+        passed = false;
+    }
+
+    if ( !(msr_feat_ctrl & IA32_FEATURE_CONTROL_ENABLE_VMXON_OUTSIDE_SMX) )
+    {
+        xtf_failure("Fail: MSR_IA32_FEATURE_CONTROL[2] is not set\n");
+        passed = false;
+    }
+
+    if ( !(msr_feat_ctrl & IA32_FEATURE_CONTROL_LOCK) )
+    {
+        xtf_failure("Fail: MSR_IA32_FEATURE_CONTROL[0] is not set\n");
+        passed = false;
+    }
+
+out:
+    return passed;
+}
+
+bool test_msr_vmx(void)
+{
+    if ( !test_msr_feature_control() )
+        return false;
+
+    return true;
+}
+
+/*
+ * Local variables:
+ * mode: C
+ * c-file-style: "BSD"
+ * c-basic-offset: 4
+ * tab-width: 4
+ * indent-tabs-mode: nil
+ * End:
+ */
-- 
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®.