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