# HG changeset patch # User Keir Fraser # Date 1307691167 -3600 # Node ID 2ef6bbee50371e1135236035ed1a9a7b8748e09f # Parent 0a29c8c3ddf7395ea8e68c5f4cd8633023490022 x86/vmx: Small fixes to MSR_IA32_VMX_PROCBASED_CTLS feature probing. Should check for VIRTUAL_INTR_PENDING as we unconditionally make use of it. Also check for CR8 exiting unconditionally on x86/64, as this is of use to nestedvmx, and every 64-bit cpu should support it. Signed-off-by: Eddie Dong Signed-off-by: Keir Fraser --- a/xen/arch/x86/hvm/vmx/vmcs.c +++ b/xen/arch/x86/hvm/vmx/vmcs.c @@ -147,6 +147,11 @@ static int vmx_init_vmcs_config(void) MSR_IA32_VMX_PINBASED_CTLS, &mismatch); min = (CPU_BASED_HLT_EXITING | + CPU_BASED_VIRTUAL_INTR_PENDING | +#ifdef __x86_64__ + CPU_BASED_CR8_LOAD_EXITING | + CPU_BASED_CR8_STORE_EXITING | +#endif CPU_BASED_INVLPG_EXITING | CPU_BASED_CR3_LOAD_EXITING | CPU_BASED_CR3_STORE_EXITING | @@ -165,13 +170,9 @@ static int vmx_init_vmcs_config(void) MSR_IA32_VMX_PROCBASED_CTLS, &mismatch); _vmx_cpu_based_exec_control &= ~CPU_BASED_RDTSC_EXITING; #ifdef __x86_64__ - if ( !(_vmx_cpu_based_exec_control & CPU_BASED_TPR_SHADOW) ) - { - min |= CPU_BASED_CR8_LOAD_EXITING | CPU_BASED_CR8_STORE_EXITING; - _vmx_cpu_based_exec_control = adjust_vmx_controls( - "CPU-Based Exec Control", min, opt, - MSR_IA32_VMX_PROCBASED_CTLS, &mismatch); - } + if ( _vmx_cpu_based_exec_control & CPU_BASED_TPR_SHADOW ) + _vmx_cpu_based_exec_control &= + ~(CPU_BASED_CR8_LOAD_EXITING | CPU_BASED_CR8_STORE_EXITING); #endif if ( _vmx_cpu_based_exec_control & CPU_BASED_ACTIVATE_SECONDARY_CONTROLS )