|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [XTF PATCH 03/16] vvmx: test whether MSR_IA32_VMX_BASIC is set correctly
On 16/12/16 13:43, Haozhong Zhang wrote:
> 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");
Out of interest, what is the reason for requiring this bit to be 0? I
can see that the manual insists that it is, but not why.
> + 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 )
There is nothing in principle wrong with Xen setting this bit. It would
be odd certainly, but not erroneous.
~Andrew
> + {
> + 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;
> }
>
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
https://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |