Index: /trunk/src/VBox/VMM/VMMAll/IEMAllCImplVmxInstr.cpp.h
===================================================================
--- /trunk/src/VBox/VMM/VMMAll/IEMAllCImplVmxInstr.cpp.h	(revision 75967)
+++ /trunk/src/VBox/VMM/VMMAll/IEMAllCImplVmxInstr.cpp.h	(revision 75968)
@@ -3774,4 +3774,5 @@
             /* Cause the VMX-preemption timer VM-exit. The VM-exit qualification MBZ. */
             iemVmxVmcsSetExitQual(pVCpu, 0);
+            VMCPU_FF_CLEAR(pVCpu, VMCPU_FF_VMX_PREEMPT_TIMER);
             return iemVmxVmexit(pVCpu, VMX_EXIT_PREEMPT_TIMER);
         }
@@ -7006,4 +7007,25 @@
 
 /**
+ * Set up the monitor-trap flag (MTF).
+ *
+ * @param   pVCpu       The cross context virtual CPU structure.
+ * @param   pszInstr    The VMX instruction name (for logging purposes).
+ */
+IEM_STATIC void iemVmxVmentrySetupMtf(PVMCPU pVCpu, const char *pszInstr)
+{
+    PCVMXVVMCS pVmcs = pVCpu->cpum.GstCtx.hwvirt.vmx.CTX_SUFF(pVmcs);
+    Assert(pVmcs);
+    if (pVmcs->u32ProcCtls & VMX_PROC_CTLS_MONITOR_TRAP_FLAG)
+    {
+        VMCPU_FF_SET(pVCpu, VMCPU_FF_VMX_MTF);
+        Log(("%s: Monitor-trap flag set on VM-entry\n", pszInstr));
+    }
+    else
+        Assert(!VMCPU_FF_IS_SET(pVCpu, VMCPU_FF_VMX_MTF));
+    NOREF(pszInstr);
+}
+
+
+/**
  * Set up the VMX-preemption timer.
  *
@@ -7281,4 +7303,7 @@
                                 iemVmxVmentrySetupPreemptTimer(pVCpu, pszInstr);
 
+                                /* Setup monitor-trap flag. */
+                                iemVmxVmentrySetupMtf(pVCpu, pszInstr);
+
                                 /* Now that we've switched page tables, we can inject events if any. */
                                 iemVmxVmentryInjectEvent(pVCpu, pszInstr);
