Index: /trunk/src/VBox/Devices/Storage/DevBusLogic.cpp
===================================================================
--- /trunk/src/VBox/Devices/Storage/DevBusLogic.cpp	(revision 24066)
+++ /trunk/src/VBox/Devices/Storage/DevBusLogic.cpp	(revision 24067)
@@ -1,7 +1,5 @@
 /* $Id$ */
 /** @file
- *
- * VBox storage devices:
- * BusLogic SCSI host adapter BT-958
+ * VBox storage devices: BusLogic SCSI host adapter BT-958.
  */
 
@@ -2310,4 +2308,15 @@
 }
 
+static DECLCALLBACK(int) buslogicLiveExec(PPDMDEVINS pDevIns, PSSMHANDLE pSSM, uint32_t uPass)
+{
+    PBUSLOGIC pThis = PDMINS_2_DATA(pDevIns, PBUSLOGIC);
+
+    /* Save the device config. */
+    for (unsigned i = 0; i < RT_ELEMENTS(pThis->aDeviceStates); i++)
+        SSMR3PutBool(pSSM, pThis->aDeviceStates[i].fPresent);
+
+    return VINF_SSM_DONT_CALL_AGAIN;
+}
+
 static DECLCALLBACK(int) buslogicSaveExec(PPDMDEVINS pDevIns, PSSMHANDLE pSSM)
 {
@@ -2367,10 +2376,10 @@
 static DECLCALLBACK(int) buslogicLoadExec(PPDMDEVINS pDevIns, PSSMHANDLE pSSM, uint32_t uVersion, uint32_t uPass)
 {
-    PBUSLOGIC pBusLogic = PDMINS_2_DATA(pDevIns, PBUSLOGIC);
+    PBUSLOGIC   pBusLogic = PDMINS_2_DATA(pDevIns, PBUSLOGIC);
+    int         rc;
 
     /* We support saved states only from this and older versions. */
     if (uVersion > BUSLOGIC_SAVED_STATE_MINOR_VERSION)
         return VERR_SSM_UNSUPPORTED_DATA_UNIT_VERSION;
-    Assert(uPass == SSM_PASS_FINAL); NOREF(uPass);
 
     /* Every device first. */
@@ -2381,7 +2390,20 @@
         AssertMsg(!pDevice->cOutstandingRequests,
                   ("There are still outstanding requests on this device\n"));
-        SSMR3GetBool(pSSM, &pDevice->fPresent);
-        SSMR3GetU32(pSSM, (uint32_t *)&pDevice->cOutstandingRequests);
-    }
+        bool fPresent;
+        rc = SSMR3GetBool(pSSM, &fPresent);
+        AssertRCReturn(rc, rc);
+        if (pDevice->fPresent != fPresent)
+        {
+            LogRel(("BusLogic: Target %u config mismatch: config=%RTbool state=%RTbool\n", i, pDevice->fPresent, fPresent));
+            return VERR_SSM_LOAD_CONFIG_MISMATCH;
+        }
+
+        if (uPass == SSM_PASS_FINAL)
+            SSMR3GetU32(pSSM, (uint32_t *)&pDevice->cOutstandingRequests);
+    }
+
+    if (uPass != SSM_PASS_FINAL)
+        return VINF_SUCCESS;
+
     /* Now the main device state. */
     SSMR3GetU8    (pSSM, (uint8_t *)&pBusLogic->regStatus);
@@ -2432,5 +2454,5 @@
 
     uint32_t u32;
-    int rc = SSMR3GetU32(pSSM, &u32);
+    rc = SSMR3GetU32(pSSM, &u32);
     if (RT_FAILURE(rc))
         return rc;
@@ -2681,7 +2703,7 @@
      * Validate and read configuration.
      */
-    rc = CFGMR3AreValuesValid(pCfgHandle, "GCEnabled\0"
-                                          "R0Enabled\0");
-    if (RT_FAILURE(rc))
+    if (!CFGMR3AreValuesValid(pCfgHandle,
+                              "GCEnabled\0"
+                              "R0Enabled\0"))
         return PDMDEV_SET_ERROR(pDevIns, VERR_PDM_DEVINS_UNKNOWN_CFG_VALUES,
                                 N_("BusLogic configuration error: unknown option specified"));
@@ -2713,6 +2735,6 @@
     PCIDevSetClassSub         (&pThis->dev, 0x00); /* SCSI */
     PCIDevSetClassBase        (&pThis->dev, 0x01); /* Mass storage */
-    PCIDevSetBaseAddress      (&pThis->dev, 0, true, false, false, 0x00000000);
-    PCIDevSetBaseAddress      (&pThis->dev, 1, false, false, false, 0x00000000);
+    PCIDevSetBaseAddress      (&pThis->dev, 0, true  /*IO*/, false /*Pref*/, false /*64-bit*/, 0x00000000);
+    PCIDevSetBaseAddress      (&pThis->dev, 1, false /*IO*/, false /*Pref*/, false /*64-bit*/, 0x00000000);
     PCIDevSetSubSystemVendorId(&pThis->dev, 0x104b);
     PCIDevSetSubSystemId      (&pThis->dev, 0x1040);
@@ -2813,5 +2835,5 @@
 
     rc = PDMDevHlpSSMRegisterEx(pDevIns, BUSLOGIC_SAVED_STATE_MINOR_VERSION, sizeof(*pThis), NULL,
-                                NULL, NULL, NULL,
+                                NULL,                 buslogicLiveExec, NULL,
                                 buslogicSaveLoadPrep, buslogicSaveExec, NULL,
                                 buslogicSaveLoadPrep, buslogicLoadExec, NULL);
@@ -2884,2 +2906,3 @@
 #endif /* IN_RING3 */
 #endif /* !VBOX_DEVICE_STRUCT_TESTCASE */
+
