Index: /trunk/src/VBox/VMM/VMMR0/HMVMXR0.cpp
===================================================================
--- /trunk/src/VBox/VMM/VMMR0/HMVMXR0.cpp	(revision 76875)
+++ /trunk/src/VBox/VMM/VMMR0/HMVMXR0.cpp	(revision 76876)
@@ -234,4 +234,22 @@
     } while (0)
 
+# ifdef VBOX_WITH_NESTED_HWVIRT_ONLY_IN_IEM
+/** Macro that executes a VMX instruction in IEM. */
+#  define HMVMX_IEM_EXEC_VMX_INSTR_RET(a_pVCpu) \
+    do { \
+        int rc = HMVMX_CPUMCTX_IMPORT_STATE((a_pVCpu), HMVMX_CPUMCTX_EXTRN_ALL); \
+        AssertRCReturn(rc, rc); \
+        VBOXSTRICTRC rcStrict = IEMExecOne((a_pVCpu)); \
+        if (rcStrict == VINF_SUCCESS) \
+            ASMAtomicUoOrU64(&(a_pVCpu)->hm.s.fCtxChanged, HM_CHANGED_ALL_GUEST); \
+        else if (rcStrict == VINF_IEM_RAISED_XCPT) \
+        { \
+            rcStrict = VINF_SUCCESS; \
+            ASMAtomicUoOrU64(&(a_pVCpu)->hm.s.fCtxChanged, HM_CHANGED_RAISED_XCPT_MASK); \
+        } \
+        return VBOXSTRICTRC_VAL(rcStrict); \
+    } while (0)
+
+# endif /* VBOX_WITH_NESTED_HWVIRT_ONLY_IN_IEM */
 #endif /* VBOX_WITH_NESTED_HWVIRT_VMX */
 
@@ -13475,5 +13493,5 @@
     return rcStrict;
 #else
-    return VERR_EM_INTERPRETER;
+    HMVMX_IEM_EXEC_VMX_INSTR_RET(pVCpu);
 #endif
 }
@@ -13499,5 +13517,5 @@
     return rcStrict;
 #else
-    return VERR_EM_INTERPRETER;
+    HMVMX_IEM_EXEC_VMX_INSTR_RET(pVCpu);
 #endif
 }
@@ -13538,5 +13556,5 @@
     return rcStrict;
 #else
-    return VERR_EM_INTERPRETER;
+    HMVMX_IEM_EXEC_VMX_INSTR_RET(pVCpu);
 #endif
 }
@@ -13577,5 +13595,5 @@
     return rcStrict;
 #else
-    return VERR_EM_INTERPRETER;
+    HMVMX_IEM_EXEC_VMX_INSTR_RET(pVCpu);
 #endif
 }
@@ -13617,5 +13635,5 @@
     return rcStrict;
 #else
-    return VERR_EM_INTERPRETER;
+    HMVMX_IEM_EXEC_VMX_INSTR_RET(pVCpu);
 #endif
 }
@@ -13641,5 +13659,5 @@
     return rcStrict;
 #else
-    return VERR_EM_INTERPRETER;
+    HMVMX_IEM_EXEC_VMX_INSTR_RET(pVCpu);
 #endif
 }
@@ -13681,5 +13699,5 @@
     return rcStrict;
 #else
-    return VERR_EM_INTERPRETER;
+    HMVMX_IEM_EXEC_VMX_INSTR_RET(pVCpu);
 #endif
 }
@@ -13712,5 +13730,5 @@
     return rcStrict;
 #else
-    return VERR_EM_INTERPRETER;
+    HMVMX_IEM_EXEC_VMX_INSTR_RET(pVCpu);
 #endif
 }
@@ -13751,5 +13769,5 @@
     return rcStrict;
 #else
-    return VERR_EM_INTERPRETER;
+    HMVMX_IEM_EXEC_VMX_INSTR_RET(pVCpu);
 #endif
 }
