Index: /trunk/src/VBox/VMM/EM.cpp
===================================================================
--- /trunk/src/VBox/VMM/EM.cpp	(revision 32952)
+++ /trunk/src/VBox/VMM/EM.cpp	(revision 32953)
@@ -55,4 +55,5 @@
 #include <VBox/patm.h>
 #include "EMInternal.h"
+#include "include/internal/em.h"
 #include <VBox/vm.h>
 #include <VBox/cpumdis.h>
@@ -960,8 +961,17 @@
          * Execute REM.
          */
-        STAM_PROFILE_START(&pVCpu->em.s.StatREMExec, c);
-        rc = REMR3Run(pVM, pVCpu);
-        STAM_PROFILE_STOP(&pVCpu->em.s.StatREMExec, c);
-
+        if (RT_LIKELY(EMR3IsExecutionAllowed(pVM, pVCpu)))
+        {
+            STAM_PROFILE_START(&pVCpu->em.s.StatREMExec, c);
+            rc = REMR3Run(pVM, pVCpu);
+            STAM_PROFILE_STOP(&pVCpu->em.s.StatREMExec, c);
+        }
+        else
+        {
+            /* Give up this time slice; virtual time continues */
+            STAM_REL_PROFILE_ADV_START(&pVCpu->em.s.StatCapped, u);
+            RTThreadSleep(2);
+            STAM_REL_PROFILE_ADV_STOP(&pVCpu->em.s.StatCapped, u);
+        }
 
         /*
@@ -1675,5 +1685,5 @@
  *
  */
-bool emR3IsExecutionAllowed(PVM pVM, PVMCPU pVCpu)
+VMMR3DECL(bool) EMR3IsExecutionAllowed(PVM pVM, PVMCPU pVCpu)
 {
     uint64_t u64UserTime, u64KernelTime;
@@ -2001,16 +2011,5 @@
                  */
                 case EMSTATE_RAW:
-                    if (emR3IsExecutionAllowed(pVM, pVCpu))
-                    {
-                        rc = emR3RawExecute(pVM, pVCpu, &fFFDone);
-                    }
-                    else
-                    {
-                        /* Give up this time slice; virtual time continues */
-                        STAM_REL_PROFILE_ADV_START(&pVCpu->em.s.StatCapped, u);
-                        RTThreadSleep(10);
-                        STAM_REL_PROFILE_ADV_STOP(&pVCpu->em.s.StatCapped, u);
-                        rc = VINF_SUCCESS;
-                    }
+                    rc = emR3RawExecute(pVM, pVCpu, &fFFDone);
                     break;
 
@@ -2019,16 +2018,5 @@
                  */
                 case EMSTATE_HWACC:
-                    if (emR3IsExecutionAllowed(pVM, pVCpu))
-                    {
-                        rc = emR3HwAccExecute(pVM, pVCpu, &fFFDone);
-                    }
-                    else
-                    {
-                        /* Give up this time slice; virtual time continues */
-                        STAM_REL_PROFILE_ADV_START(&pVCpu->em.s.StatCapped, u);
-                        RTThreadSleep(10);
-                        STAM_REL_PROFILE_ADV_STOP(&pVCpu->em.s.StatCapped, u);
-                        rc = VINF_SUCCESS;
-                    }
+                    rc = emR3HwAccExecute(pVM, pVCpu, &fFFDone);
                     break;
 
@@ -2037,17 +2025,6 @@
                  */
                 case EMSTATE_REM:
-                    if (emR3IsExecutionAllowed(pVM, pVCpu))
-                    {
-                        rc = emR3RemExecute(pVM, pVCpu, &fFFDone);
-                        Log2(("EMR3ExecuteVM: emR3RemExecute -> %Rrc\n", rc));
-                    }
-                    else
-                    {
-                        /* Give up this time slice; virtual time continues */
-                        STAM_REL_PROFILE_ADV_START(&pVCpu->em.s.StatCapped, u);
-                        RTThreadSleep(10);
-                        STAM_REL_PROFILE_ADV_STOP(&pVCpu->em.s.StatCapped, u);
-                        rc = VINF_SUCCESS;
-                    }
+                    rc = emR3RemExecute(pVM, pVCpu, &fFFDone);
+                    Log2(("EMR3ExecuteVM: emR3RemExecute -> %Rrc\n", rc));
                     break;
 
Index: /trunk/src/VBox/VMM/EMHwaccm.cpp
===================================================================
--- /trunk/src/VBox/VMM/EMHwaccm.cpp	(revision 32952)
+++ /trunk/src/VBox/VMM/EMHwaccm.cpp	(revision 32953)
@@ -53,4 +53,5 @@
 #include <VBox/hwaccm.h>
 #include "EMInternal.h"
+#include "include/internal/em.h"
 #include <VBox/vm.h>
 #include <VBox/cpumdis.h>
@@ -544,7 +545,19 @@
          */
         STAM_PROFILE_ADV_STOP(&pVCpu->em.s.StatHwAccEntry, a);
-        STAM_PROFILE_START(&pVCpu->em.s.StatHwAccExec, x);
-        rc = VMMR3HwAccRunGC(pVM, pVCpu);
-        STAM_PROFILE_STOP(&pVCpu->em.s.StatHwAccExec, x);
+
+        if (RT_LIKELY(EMR3IsExecutionAllowed(pVM, pVCpu)))
+        {
+            STAM_PROFILE_START(&pVCpu->em.s.StatHwAccExec, x);
+            rc = VMMR3HwAccRunGC(pVM, pVCpu);
+            STAM_PROFILE_STOP(&pVCpu->em.s.StatHwAccExec, x);
+        }
+        else
+        {
+            /* Give up this time slice; virtual time continues */
+            STAM_REL_PROFILE_ADV_START(&pVCpu->em.s.StatCapped, u);
+            RTThreadSleep(2);
+            STAM_REL_PROFILE_ADV_STOP(&pVCpu->em.s.StatCapped, u);
+        }
+        
 
         /*
Index: /trunk/src/VBox/VMM/EMRaw.cpp
===================================================================
--- /trunk/src/VBox/VMM/EMRaw.cpp	(revision 32952)
+++ /trunk/src/VBox/VMM/EMRaw.cpp	(revision 32953)
@@ -54,4 +54,5 @@
 #include <VBox/patm.h>
 #include "EMInternal.h"
+#include "include/internal/em.h"
 #include <VBox/vm.h>
 #include <VBox/cpumdis.h>
@@ -1528,7 +1529,17 @@
          */
         STAM_PROFILE_ADV_STOP(&pVCpu->em.s.StatRAWEntry, b);
-        STAM_PROFILE_START(&pVCpu->em.s.StatRAWExec, c);
-        rc = VMMR3RawRunGC(pVM, pVCpu);
-        STAM_PROFILE_STOP(&pVCpu->em.s.StatRAWExec, c);
+        if (RT_LIKELY(EMR3IsExecutionAllowed(pVM, pVCpu)))
+        {
+            STAM_PROFILE_START(&pVCpu->em.s.StatRAWExec, c);
+            rc = VMMR3RawRunGC(pVM, pVCpu);
+            STAM_PROFILE_STOP(&pVCpu->em.s.StatRAWExec, c);
+        }
+        else
+        {
+            /* Give up this time slice; virtual time continues */
+            STAM_REL_PROFILE_ADV_START(&pVCpu->em.s.StatCapped, u);
+            RTThreadSleep(2);
+            STAM_REL_PROFILE_ADV_STOP(&pVCpu->em.s.StatCapped, u);
+        }
         STAM_PROFILE_ADV_START(&pVCpu->em.s.StatRAWTail, d);
 
Index: /trunk/src/VBox/VMM/include/internal/em.h
===================================================================
--- /trunk/src/VBox/VMM/include/internal/em.h	(revision 32952)
+++ /trunk/src/VBox/VMM/include/internal/em.h	(revision 32953)
@@ -24,3 +24,5 @@
 VMMR3DECL(int)  EMR3NotifySuspend(PVM pVM);
 
+VMMR3DECL(bool) EMR3IsExecutionAllowed(PVM pVM, PVMCPU pVCpu);
+
 #endif
