|
[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
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |