[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [PATCH] x86/vmx: Remove IO bitmap from minimal VMX requirements
This patch is a result of a downstream bug report[1]. Xen fails to create a HVM domain while running under VMware Fusion 12.1.0 on a modern Intel Core i9 CPU: (XEN) VMX: CPU0 has insufficient CPU-Based Exec Control (b5b9fffe; requires 2299968c) (XEN) VMX: failed to initialise. It seems that Apple hypervisor API doesn't support this feature[2]. Move this bit from minimal required features to optional. [1] https://github.com/CERT-Polska/drakvuf-sandbox/issues/418 [2] https://developer.apple.com/documentation/hypervisor/cpu_based_io_bitmaps Signed-off-by: Hubert Jasudowicz <hubert.jasudowicz@xxxxxxx> --- xen/arch/x86/hvm/vmx/vmcs.c | 8 +++++--- xen/include/asm-x86/hvm/vmx/vmcs.h | 2 ++ 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/xen/arch/x86/hvm/vmx/vmcs.c b/xen/arch/x86/hvm/vmx/vmcs.c index 164535f8f0..bad4d6e206 100644 --- a/xen/arch/x86/hvm/vmx/vmcs.c +++ b/xen/arch/x86/hvm/vmx/vmcs.c @@ -276,10 +276,10 @@ static int vmx_init_vmcs_config(void) CPU_BASED_MONITOR_EXITING | CPU_BASED_MWAIT_EXITING | CPU_BASED_MOV_DR_EXITING | - CPU_BASED_ACTIVATE_IO_BITMAP | CPU_BASED_USE_TSC_OFFSETING | CPU_BASED_RDTSC_EXITING); opt = (CPU_BASED_ACTIVATE_MSR_BITMAP | + CPU_BASED_ACTIVATE_IO_BITMAP | CPU_BASED_TPR_SHADOW | CPU_BASED_MONITOR_TRAP_FLAG | CPU_BASED_ACTIVATE_SECONDARY_CONTROLS); @@ -1168,8 +1168,10 @@ static int construct_vmcs(struct vcpu *v) } /* I/O access bitmap. */ - __vmwrite(IO_BITMAP_A, __pa(d->arch.hvm.io_bitmap)); - __vmwrite(IO_BITMAP_B, __pa(d->arch.hvm.io_bitmap) + PAGE_SIZE); + if ( cpu_has_vmx_io_bitmap ) { + __vmwrite(IO_BITMAP_A, __pa(d->arch.hvm.io_bitmap)); + __vmwrite(IO_BITMAP_B, __pa(d->arch.hvm.io_bitmap) + PAGE_SIZE); + } if ( cpu_has_vmx_virtual_intr_delivery ) { diff --git a/xen/include/asm-x86/hvm/vmx/vmcs.h b/xen/include/asm-x86/hvm/vmx/vmcs.h index 906810592f..b00830a5b3 100644 --- a/xen/include/asm-x86/hvm/vmx/vmcs.h +++ b/xen/include/asm-x86/hvm/vmx/vmcs.h @@ -342,6 +342,8 @@ extern u64 vmx_ept_vpid_cap; (vmx_secondary_exec_control & SECONDARY_EXEC_XSAVES) #define cpu_has_vmx_tsc_scaling \ (vmx_secondary_exec_control & SECONDARY_EXEC_TSC_SCALING) +#define cpu_has_vmx_io_bitmap \ + (vmx_cpu_based_exec_control & CPU_BASED_ACTIVATE_IO_BITMAP) #define VMCS_RID_TYPE_MASK 0x80000000 -- 2.30.0
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |