diff options
author | jhb <jhb@FreeBSD.org> | 2014-06-12 21:36:17 +0000 |
---|---|---|
committer | jhb <jhb@FreeBSD.org> | 2014-06-12 21:36:17 +0000 |
commit | d33f5b125320499b1544b32176759b38ea8aa717 (patch) | |
tree | 1845d7674e211d302afcb5c2f20a95abfec2b7d5 /sys/amd64/vmm/intel/vmx.c | |
parent | 3e1f2ae835422b06a1812ad150561de8d78e7998 (diff) | |
download | FreeBSD-src-d33f5b125320499b1544b32176759b38ea8aa717.zip FreeBSD-src-d33f5b125320499b1544b32176759b38ea8aa717.tar.gz |
MFC 262615,262624:
Workaround an apparent bug in VMWare Fusion's nested VT support where it
triggers a VM exit with the exit reason of an external interrupt but
without a valid interrupt set in the exit interrupt information.
Diffstat (limited to 'sys/amd64/vmm/intel/vmx.c')
-rw-r--r-- | sys/amd64/vmm/intel/vmx.c | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/sys/amd64/vmm/intel/vmx.c b/sys/amd64/vmm/intel/vmx.c index 2d4f376..c4ad484 100644 --- a/sys/amd64/vmm/intel/vmx.c +++ b/sys/amd64/vmm/intel/vmx.c @@ -1761,6 +1761,13 @@ vmx_exit_process(struct vmx *vmx, int vcpu, struct vm_exit *vmexit) * this virtual interrupt during the subsequent VM enter. */ intr_info = vmcs_read(VMCS_EXIT_INTR_INFO); + + /* + * XXX: Ignore this exit if VMCS_INTR_VALID is not set. + * This appears to be a bug in VMware Fusion? + */ + if (!(intr_info & VMCS_INTR_VALID)) + return (1); KASSERT((intr_info & VMCS_INTR_VALID) != 0 && (intr_info & VMCS_INTR_T_MASK) == VMCS_INTR_T_HWINTR, ("VM exit interruption info invalid: %#x", intr_info)); |