Index: /trunk/src/VBox/Devices/Storage/DevBusLogic.cpp
===================================================================
--- /trunk/src/VBox/Devices/Storage/DevBusLogic.cpp	(revision 24069)
+++ /trunk/src/VBox/Devices/Storage/DevBusLogic.cpp	(revision 24070)
@@ -2270,5 +2270,5 @@
      */
     u64Start = RTTimeMilliTS();
-    do
+    for (;;)
     {
         fIdle = true;
@@ -2284,26 +2284,13 @@
             }
         }
-        if (RTTimeMilliTS() - u64Start >= cMillies)
+        if (   fIdle
+            || RTTimeMilliTS() - u64Start >= cMillies)
             break;
 
         /* Sleep for a bit. */
-        RTThreadSleep(100);
-    } while (!fIdle);
+        RTThreadSleep(100); /** @todo wait on something which can be woken up. 100ms is too long for teleporting VMs! */
+    }
 
     return fIdle;
-}
-
-static DECLCALLBACK(int) buslogicSaveLoadPrep(PPDMDEVINS pDevIns, PSSMHANDLE pSSM)
-{
-    PBUSLOGIC pBusLogic = PDMINS_2_DATA(pDevIns, PBUSLOGIC);
-
-    /* Wait that no task is pending on any device. */
-    if (!buslogicWaitForAsyncIOFinished(pBusLogic, 20000))
-    {
-        AssertLogRelMsgFailed(("BusLogic: There are still tasks outstanding\n"));
-        return VERR_TIMEOUT;
-    }
-
-    return VINF_SUCCESS;
 }
 
@@ -2317,4 +2304,18 @@
 
     return VINF_SSM_DONT_CALL_AGAIN;
+}
+
+static DECLCALLBACK(int) buslogicSaveLoadPrep(PPDMDEVINS pDevIns, PSSMHANDLE pSSM)
+{
+    PBUSLOGIC pBusLogic = PDMINS_2_DATA(pDevIns, PBUSLOGIC);
+
+    /* Wait that no task is pending on any device. */
+    if (!buslogicWaitForAsyncIOFinished(pBusLogic, 20000))
+    {
+        AssertLogRelMsgFailed(("BusLogic: There are still tasks outstanding\n"));
+        return VERR_TIMEOUT;
+    }
+
+    return VINF_SUCCESS;
 }
 
