Index: trunk/src/VBox/VMM/VMMR0/VMMR0.cpp
===================================================================
--- trunk/src/VBox/VMM/VMMR0/VMMR0.cpp	(revision 88344)
+++ trunk/src/VBox/VMM/VMMR0/VMMR0.cpp	(revision 88346)
@@ -601,5 +601,5 @@
 }
 
-#if 0 /** @todo broken see oem2 ticket 40 */
+#if 0 /** @todo temporarily disabled, see oem2 ticket 40 */
 
 /**
@@ -644,4 +644,5 @@
     else if (VMCPU_FF_IS_SET(pVCpu, VMCPU_FF_INTERRUPT_SMI))
     {
+        Log12(("vmmR0DoHaltInterrupt: CPU%d failed #3\n", pVCpu->idCpu));
         return VINF_EM_HALT;
     }
@@ -654,4 +655,5 @@
         {
             /** @todo later. */
+            Log12(("vmmR0DoHaltInterrupt: CPU%d failed #2 (uMWait=%u enmInt=%d)\n", pVCpu->idCpu, uMWait, enmInterruptibility));
             return VINF_EM_HALT;
         }
@@ -667,4 +669,5 @@
              *        here before injecting the virtual interrupt. See emR3ForcedActions
              *        for details. */
+            Log12(("vmmR0DoHaltInterrupt: CPU%d failed #1 (uMWait=%u enmInt=%d)\n", pVCpu->idCpu, uMWait, enmInterruptibility));
             return VINF_EM_HALT;
         }
@@ -674,4 +677,5 @@
     {
         STAM_REL_COUNTER_INC(&pVCpu->vmm.s.StatR0HaltExec);
+        Log11(("vmmR0DoHaltInterrupt: CPU%d success VINF_SUCCESS (UNHALT)\n", pVCpu->idCpu));
         return VINF_SUCCESS;
     }
@@ -679,7 +683,9 @@
     {
         STAM_REL_COUNTER_INC(&pVCpu->vmm.s.StatR0HaltExec);
+        Log11(("vmmR0DoHaltInterrupt: CPU%d success VINF_SUCCESS (uMWait=%u > 1)\n", pVCpu->idCpu, uMWait));
         return VINF_SUCCESS;
     }
 
+    Log12(("vmmR0DoHaltInterrupt: CPU%d failed #0 (uMWait=%u enmInt=%d)\n", pVCpu->idCpu, uMWait, enmInterruptibility));
     return VINF_EM_HALT;
 }
@@ -850,4 +856,5 @@
                             uint64_t const u64EndSchedHalt     = RTTimeNanoTS();
                             uint64_t const cNsElapsedSchedHalt = u64EndSchedHalt - u64StartSchedHalt;
+                            Log10(("vmmR0DoHalt: CPU%d: halted %llu ns\n", pGVCpu->idCpu, cNsElapsedSchedHalt));
 
                             VMCPU_CMPXCHG_STATE(pGVCpu, VMCPUSTATE_STARTED, VMCPUSTATE_STARTED_HALTED);
@@ -878,14 +885,32 @@
                                         return vmmR0DoHaltInterrupt(pGVCpu, uMWait, enmInterruptibility);
                                     }
+                                    Log12(("vmmR0DoHalt: CPU%d post #2 - No pending interrupt\n", pGVCpu->idCpu));
                                 }
+                                else
+                                    Log12(("vmmR0DoHalt: CPU%d post #1 - Pending FF\n", pGVCpu->idCpu));
                             }
+                            else
+                                Log12(("vmmR0DoHalt: CPU%d GVMMR0SchedHalt failed: %Rrc\n", pGVCpu->idCpu, rc));
                         }
                         else
+                        {
                             VMCPU_CMPXCHG_STATE(pGVCpu, VMCPUSTATE_STARTED, VMCPUSTATE_STARTED_HALTED);
+                            Log12(("vmmR0DoHalt: CPU%d failed #4 - Pending FF\n", pGVCpu->idCpu));
+                        }
                     }
+                    else
+                        Log12(("vmmR0DoHalt: CPU%d failed #3 - enmState=%d\n", pGVCpu->idCpu, VMCPU_GET_STATE(pGVCpu)));
                 }
+                else
+                    Log12(("vmmR0DoHalt: CPU%d failed #2 - Pending FF\n", pGVCpu->idCpu));
             }
         }
-    }
+        else
+            Log12(("vmmR0DoHalt: CPU%d failed #1 - Pending FF\n", pGVCpu->idCpu));
+    }
+    else
+        Log12(("vmmR0DoHalt: CPU%d failed #0 - fMayHaltInRing0=%d TRPMHasTrap=%d enmInt=%d uMWait=%u\n",
+               pGVCpu->idCpu, pGVCpu->vmm.s.fMayHaltInRing0, TRPMHasTrap(pGVCpu), enmInterruptibility, uMWait));
+
     return VINF_EM_HALT;
 }
@@ -1491,5 +1516,5 @@
                     vmmR0RecordRC(pGVM, pGVCpu, rc);
 #endif
-#if 0 /** @todo broken see oem2 ticket 40 */
+#if 0 /** @todo temporarily disabled, see oem2 ticket 40 */
                     /*
                      * If this is a halt.
