VirtualBox

Changeset 38847 in vbox for trunk/src/VBox


Ignore:
Timestamp:
Sep 23, 2011 1:19:23 PM (13 years ago)
Author:
vboxsync
Message:

PDM: Enter the device critical section for PDM callback.

Location:
trunk/src/VBox/VMM/VMMR3
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/VMM/VMMR3/PDM.cpp

    r38838 r38847  
    10571057    {
    10581058        LogFlow(("PDMR3PowerOn: Notifying - device '%s'/%d\n", pDevIns->pReg->szName, pDevIns->iInstance));
     1059        PDMCritSectEnter(pDevIns->pCritSectRoR3, VERR_IGNORED);
    10591060        int rc = VINF_SUCCESS; pDevIns->pReg->pfnPowerOn(pDevIns);
     1061        PDMCritSectLeave(pDevIns->pCritSectRoR3);
    10601062        if (RT_FAILURE(rc))
    10611063        {
     
    13431345        if (pDevIns->pReg->pfnReset)
    13441346        {
     1347            uint64_t cNsElapsed = RTTimeNanoTS();
     1348            PDMCritSectEnter(pDevIns->pCritSectRoR3, VERR_IGNORED);
     1349
    13451350            if (!pDevIns->Internal.s.pfnAsyncNotify)
    13461351            {
     
    13601365                pdmR3NotifyAsyncAdd(pAsync, pDevIns->Internal.s.pDevR3->pReg->szName, pDevIns->iInstance);
    13611366            }
     1367
     1368            PDMCritSectLeave(pDevIns->pCritSectRoR3);
     1369            cNsElapsed = RTTimeNanoTS() - cNsElapsed;
     1370            if (cNsElapsed >= PDMSUSPEND_WARN_AT_NS)
     1371                LogRel(("PDMR3Reset: device '%s'/%d took %'llu ns to reset\n",
     1372                        pDevIns->pReg->szName, pDevIns->iInstance, cNsElapsed));
    13621373        }
    13631374    }
     
    15801591        {
    15811592            uint64_t cNsElapsed = RTTimeNanoTS();
     1593            PDMCritSectEnter(pDevIns->pCritSectRoR3, VERR_IGNORED);
    15821594
    15831595            if (!pDevIns->Internal.s.pfnAsyncNotify)
     
    15991611            }
    16001612
     1613            PDMCritSectLeave(pDevIns->pCritSectRoR3);
    16011614            cNsElapsed = RTTimeNanoTS() - cNsElapsed;
    16021615            if (cNsElapsed >= PDMSUSPEND_WARN_AT_NS)
     
    17561769    {
    17571770        LogFlow(("PDMR3Resume: Notifying - device '%s'/%d\n", pDevIns->pReg->szName, pDevIns->iInstance));
     1771        PDMCritSectEnter(pDevIns->pCritSectRoR3, VERR_IGNORED);
    17581772        int rc = VINF_SUCCESS; pDevIns->pReg->pfnResume(pDevIns);
     1773        PDMCritSectLeave(pDevIns->pCritSectRoR3);
    17591774        if (RT_FAILURE(rc))
    17601775        {
     
    19391954        {
    19401955            uint64_t cNsElapsed = RTTimeNanoTS();
     1956            PDMCritSectEnter(pDevIns->pCritSectRoR3, VERR_IGNORED);
    19411957
    19421958            if (!pDevIns->Internal.s.pfnAsyncNotify)
     
    19581974            }
    19591975
     1976            PDMCritSectLeave(pDevIns->pCritSectRoR3);
    19601977            cNsElapsed = RTTimeNanoTS() - cNsElapsed;
    19611978            if (cNsElapsed >= PDMPOWEROFF_WARN_AT_NS)
  • trunk/src/VBox/VMM/VMMR3/PDMDevice.cpp

    r37812 r38847  
    420420        if (pDevIns->pReg->pfnInitComplete)
    421421        {
     422            PDMCritSectEnter(pDevIns->pCritSectRoR3, VERR_IGNORED);
    422423            rc = pDevIns->pReg->pfnInitComplete(pDevIns);
     424            PDMCritSectLeave(pDevIns->pCritSectRoR3);
    423425            if (RT_FAILURE(rc))
    424426            {
     
    796798            if (!pLun->pTop)
    797799            {
     800                PDMCritSectEnter(pDevIns->pCritSectRoR3, VERR_IGNORED);
    798801                rc = pDevIns->pReg->pfnAttach(pDevIns, iLun, fFlags);
     802                PDMCritSectLeave(pDevIns->pCritSectRoR3);
    799803            }
    800804            else
     
    904908            if (pDevIns->pReg->pfnAttach)
    905909            {
     910                PDMCritSectEnter(pDevIns->pCritSectRoR3, VERR_IGNORED);
    906911                rc = pDevIns->pReg->pfnAttach(pDevIns, iLun, fFlags);
    907912                if (RT_SUCCESS(rc) && ppBase)
    908913                    *ppBase = pLun->pTop ? &pLun->pTop->IBase : NULL;
     914                PDMCritSectLeave(pDevIns->pCritSectRoR3);
    909915            }
    910916            else
  • trunk/src/VBox/VMM/VMMR3/PDMDriver.cpp

    r37418 r38847  
    641641            pLun->pTop = NULL;
    642642            if (!(fFlags & PDM_TACH_FLAGS_NO_CALLBACKS) && pLun->pDevIns->pReg->pfnDetach)
     643            {
     644                PDMCritSectEnter(pLun->pDevIns->pCritSectRoR3, VERR_IGNORED);
    643645                pLun->pDevIns->pReg->pfnDetach(pLun->pDevIns, pLun->iLun, fFlags);
     646                PDMCritSectLeave(pLun->pDevIns->pCritSectRoR3);
     647            }
    644648        }
    645649
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