VirtualBox

Changeset 24099 in vbox for trunk/src/VBox/Devices


Ignore:
Timestamp:
Oct 26, 2009 11:29:43 PM (15 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
53984
Message:

DevBusLogic: Drop the suspend and load/save synchronization since DrvSCSI/PDMThread takes care of this.

Location:
trunk/src/VBox/Devices/Storage
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Devices/Storage/DevBusLogic.cpp

    r24070 r24099  
    22612261}
    22622262
    2263 static bool buslogicWaitForAsyncIOFinished(PBUSLOGIC pBusLogic, unsigned cMillies)
    2264 {
    2265     uint64_t u64Start;
    2266     bool     fIdle;
    2267 
    2268     /*
    2269      * Wait for any pending async operation to finish
    2270      */
    2271     u64Start = RTTimeMilliTS();
    2272     for (;;)
    2273     {
    2274         fIdle = true;
    2275 
    2276         /* Check every port. */
    2277         for (unsigned i = 0; i < RT_ELEMENTS(pBusLogic->aDeviceStates); i++)
    2278         {
    2279             PBUSLOGICDEVICE pBusLogicDevice = &pBusLogic->aDeviceStates[i];
    2280             if (ASMAtomicReadU32(&pBusLogicDevice->cOutstandingRequests))
    2281             {
    2282                 fIdle = false;
    2283                 break;
    2284             }
    2285         }
    2286         if (   fIdle
    2287             || RTTimeMilliTS() - u64Start >= cMillies)
    2288             break;
    2289 
    2290         /* Sleep for a bit. */
    2291         RTThreadSleep(100); /** @todo wait on something which can be woken up. 100ms is too long for teleporting VMs! */
    2292     }
    2293 
    2294     return fIdle;
    2295 }
    2296 
    22972263static DECLCALLBACK(int) buslogicLiveExec(PPDMDEVINS pDevIns, PSSMHANDLE pSSM, uint32_t uPass)
    22982264{
     
    23042270
    23052271    return VINF_SSM_DONT_CALL_AGAIN;
    2306 }
    2307 
    2308 static DECLCALLBACK(int) buslogicSaveLoadPrep(PPDMDEVINS pDevIns, PSSMHANDLE pSSM)
    2309 {
    2310     PBUSLOGIC pBusLogic = PDMINS_2_DATA(pDevIns, PBUSLOGIC);
    2311 
    2312     /* Wait that no task is pending on any device. */
    2313     if (!buslogicWaitForAsyncIOFinished(pBusLogic, 20000))
    2314     {
    2315         AssertLogRelMsgFailed(("BusLogic: There are still tasks outstanding\n"));
    2316         return VERR_TIMEOUT;
    2317     }
    2318 
    2319     return VINF_SUCCESS;
    23202272}
    23212273
     
    26252577}
    26262578
    2627 static DECLCALLBACK(void) buslogicSuspend(PPDMDEVINS pDevIns)
    2628 {
    2629     PBUSLOGIC pBusLogic = PDMINS_2_DATA(pDevIns, PBUSLOGIC);
    2630 
    2631     /* Wait that no task is pending on any device. */
    2632     if (!buslogicWaitForAsyncIOFinished(pBusLogic, 20000))
    2633         AssertLogRelMsgFailed(("BusLogic: There are still tasks outstanding\n"));
    2634 }
    2635 
    26362579static DECLCALLBACK(void) buslogicRelocate(PPDMDEVINS pDevIns, RTGCINTPTR offDelta)
    26372580{
     
    28352778    }
    28362779
    2837     rc = PDMDevHlpSSMRegisterEx(pDevIns, BUSLOGIC_SAVED_STATE_MINOR_VERSION, sizeof(*pThis), NULL,
    2838                                 NULL,                 buslogicLiveExec, NULL,
    2839                                 buslogicSaveLoadPrep, buslogicSaveExec, NULL,
    2840                                 buslogicSaveLoadPrep, buslogicLoadExec, NULL);
     2780    rc = PDMDevHlpSSMRegister3(pDevIns, BUSLOGIC_SAVED_STATE_MINOR_VERSION, sizeof(*pThis),
     2781                               buslogicLiveExec, buslogicSaveExec, buslogicLoadExec);
    28412782    if (RT_FAILURE(rc))
    28422783        return PDMDEV_SET_ERROR(pDevIns, rc, N_("BusLogic cannot register save state handlers"));
     
    28642805    "BusLogic BT-958 SCSI host adapter.\n",
    28652806    /* fFlags */
    2866       PDM_DEVREG_FLAGS_DEFAULT_BITS | PDM_DEVREG_FLAGS_RC | PDM_DEVREG_FLAGS_R0
    2867     | PDM_DEVREG_FLAGS_FIRST_SUSPEND_NOTIFICATION
    2868     | PDM_DEVREG_FLAGS_FIRST_POWEROFF_NOTIFICATION,
     2807    PDM_DEVREG_FLAGS_DEFAULT_BITS | PDM_DEVREG_FLAGS_RC | PDM_DEVREG_FLAGS_R0,
    28692808    /* fClass */
    28702809    PDM_DEVREG_CLASS_STORAGE,
     
    28862825    buslogicReset,
    28872826    /* pfnSuspend */
    2888     buslogicSuspend,
     2827    NULL,
    28892828    /* pfnResume */
    28902829    NULL,
  • trunk/src/VBox/Devices/Storage/DevLsiLogicSCSI.cpp

    r24098 r24099  
    51725172 *        in the I/O controllers and reduce the time it takes to suspend a VM a
    51735173 *        wee bit...
     5174 *
     5175 * DrvSCSI should implement the reset notification, then we could retire this
     5176 * fun lsilogicWaitForAsyncIOFinished code.  (The drivers are reset before the
     5177 * device.)  The deadlock trap is still there though.
    51745178 */
    51755179    bool fIdle = lsilogicWaitForAsyncIOFinished(pLsiLogic, 20000);
     
    54515455    "LSI Logic 53c1030 SCSI controller.\n",
    54525456    /* fFlags */
    5453       PDM_DEVREG_FLAGS_DEFAULT_BITS | PDM_DEVREG_FLAGS_RC | PDM_DEVREG_FLAGS_R0
    5454     | PDM_DEVREG_FLAGS_FIRST_SUSPEND_NOTIFICATION
    5455     | PDM_DEVREG_FLAGS_FIRST_POWEROFF_NOTIFICATION,
     5457    PDM_DEVREG_FLAGS_DEFAULT_BITS | PDM_DEVREG_FLAGS_RC | PDM_DEVREG_FLAGS_R0,
    54565458    /* fClass */
    54575459    PDM_DEVREG_CLASS_STORAGE,
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette