Index: /trunk/src/VBox/VMM/VMMR0/HMVMXR0.cpp
===================================================================
--- /trunk/src/VBox/VMM/VMMR0/HMVMXR0.cpp	(revision 45480)
+++ /trunk/src/VBox/VMM/VMMR0/HMVMXR0.cpp	(revision 45481)
@@ -5590,4 +5590,5 @@
 
     int rc = hmR0VmxSaveGuestState(pVM, pVCpu, pMixedCtx);
+    Assert(pVCpu->hm.s.vmx.fUpdatedGuestState == VMX_UPDATED_GUEST_ALL);
     AssertRC(rc);
 
@@ -5839,5 +5840,6 @@
                 }
             }
-            else if (!(pVCpu->hm.s.vmx.u32ProcCtls & VMX_VMCS_CTRL_PROC_EXEC_CONTROLS_INT_WINDOW_EXIT))
+            else if (   !(pVCpu->hm.s.vmx.u32ProcCtls & VMX_VMCS_CTRL_PROC_EXEC_CONTROLS_INT_WINDOW_EXIT)
+                     && (pVM->hm.s.vmx.msr.vmx_proc_ctls.n.allowed1 & VMX_VMCS_CTRL_PROC_EXEC_CONTROLS_INT_WINDOW_EXIT))
             {
                 /* Instruct VT-x to cause an interrupt-window exit as soon as the guest is ready to receive interrupts again. */
@@ -6892,4 +6894,5 @@
 
     /* Indicate that we no longer need to VM-exit when the guest is ready to receive interrupts, it is now ready. */
+    Assert(pVCpu->hm.s.vmx.u32ProcCtls & VMX_VMCS_CTRL_PROC_EXEC_CONTROLS_INT_WINDOW_EXIT);
     pVCpu->hm.s.vmx.u32ProcCtls &= ~VMX_VMCS_CTRL_PROC_EXEC_CONTROLS_INT_WINDOW_EXIT;
     int rc = VMXWriteVmcs32(VMX_VMCS32_CTRL_PROC_EXEC_CONTROLS, pVCpu->hm.s.vmx.u32ProcCtls);
@@ -8753,5 +8756,4 @@
         pVCpu->hm.s.fContextUseFlags |=   HM_CHANGED_GUEST_RIP | HM_CHANGED_GUEST_RSP | HM_CHANGED_GUEST_RFLAGS
                                         | HM_CHANGED_VMX_GUEST_APIC_STATE;
-
         TRPMResetTrap(pVCpu);
         STAM_COUNTER_INC(&pVCpu->hm.s.StatExitShadowPF);
@@ -8776,4 +8778,5 @@
             Assert(!pVCpu->hm.s.Event.fPending);
             TRPMResetTrap(pVCpu);
+            Log(("#PF: Injecting #DF\n"));
             rc = hmR0VmxInjectXcptDF(pVM, pVCpu, pMixedCtx);
         }
