summaryrefslogtreecommitdiffstats
path: root/sys/amd64/vmm/intel/vmx.c
diff options
context:
space:
mode:
authorjhb <jhb@FreeBSD.org>2014-06-12 21:36:17 +0000
committerjhb <jhb@FreeBSD.org>2014-06-12 21:36:17 +0000
commitd33f5b125320499b1544b32176759b38ea8aa717 (patch)
tree1845d7674e211d302afcb5c2f20a95abfec2b7d5 /sys/amd64/vmm/intel/vmx.c
parent3e1f2ae835422b06a1812ad150561de8d78e7998 (diff)
downloadFreeBSD-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.c7
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));
OpenPOWER on IntegriCloud