Index: /trunk/src/VBox/VMM/EM.cpp
===================================================================
--- /trunk/src/VBox/VMM/EM.cpp	(revision 20121)
+++ /trunk/src/VBox/VMM/EM.cpp	(revision 20122)
@@ -511,5 +511,5 @@
 static DECLCALLBACK(int) emR3Save(PVM pVM, PSSMHANDLE pSSM)
 {
-    for (unsigned i=0;i<pVM->cCPUs;i++)
+    for (VMCPUID i = 0; i < pVM->cCPUs; i++)
     {
         PVMCPU pVCpu = &pVM->aCpus[i];
@@ -552,5 +552,5 @@
      * Load the saved state.
      */
-    for (unsigned i=0;i<pVM->cCPUs;i++)
+    for (VMCPUID i = 0; i < pVM->cCPUs; i++)
     {
         PVMCPU pVCpu = &pVM->aCpus[i];
@@ -562,13 +562,10 @@
         if (u32Version > EM_SAVED_STATE_VERSION_PRE_SMP)
         {
-            EMSTATE     enmState;
-            uint32_t    u32;
-            rc = SSMR3GetU32(pSSM, &u32);
+            AssertCompile(sizeof(pVCpu->em.s.enmPrevState) == sizeof(uint32_t));
+            rc = SSMR3GetU32(pSSM, (uint32_t *)&pVCpu->em.s.enmPrevState);
             AssertRCReturn(rc, rc);
-
-            enmState = (EMSTATE)u32;
-            Assert(enmState != EMSTATE_SUSPENDED);
-            pVCpu->em.s.enmState     = enmState;
-            pVCpu->em.s.enmPrevState = EMSTATE_NONE;
+            Assert(pVCpu->em.s.enmPrevState != EMSTATE_SUSPENDED);
+
+            pVCpu->em.s.enmState = EMSTATE_SUSPENDED;
         }
         Assert(!pVCpu->em.s.pCliStatTree);
@@ -3667,5 +3664,8 @@
              pVCpu->em.s.enmState, EMR3GetStateName(pVCpu->em.s.enmState), pVCpu->em.s.fForceRAW));
     VM_ASSERT_EMT(pVM);
-    Assert(pVCpu->em.s.enmState == EMSTATE_NONE || pVCpu->em.s.enmState == EMSTATE_WAIT_SIPI || pVCpu->em.s.enmState == EMSTATE_SUSPENDED || pVCpu->em.s.enmState == EMSTATE_HALTED);
+    AssertMsg(   pVCpu->em.s.enmState == EMSTATE_NONE
+              || pVCpu->em.s.enmState == EMSTATE_WAIT_SIPI
+              || pVCpu->em.s.enmState == EMSTATE_SUSPENDED,
+              ("%s\n", EMR3GetStateName(pVCpu->em.s.enmState)));
 
     int rc = setjmp(pVCpu->em.s.u.FatalLongJump);
@@ -3685,11 +3685,10 @@
         rc = VINF_SUCCESS;
 
+        /* If resuming after a pause or a state load, restore the previous
+           state or else we'll start executing code. Else, just reschedule. */
         if (    pVCpu->em.s.enmState == EMSTATE_SUSPENDED
             &&  (   pVCpu->em.s.enmPrevState == EMSTATE_WAIT_SIPI
                  || pVCpu->em.s.enmPrevState == EMSTATE_HALTED))
-        {
-            /* Pause->Resume: Restore the old wait state or else we'll start executing code. */
             pVCpu->em.s.enmState = pVCpu->em.s.enmPrevState;
-        }
         else
             pVCpu->em.s.enmState = emR3Reschedule(pVM, pVCpu, pVCpu->em.s.pCtx);
