VirtualBox

Changeset 15423 in vbox


Ignore:
Timestamp:
Dec 13, 2008 8:43:02 AM (16 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
40872
Message:

PGMR0DynMap: bail out on failure, don't crash the host.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/VMM/VMMR0/PGMR0DynMap.cpp

    r15411 r15423  
    231231/** Pointer to the ring-0 dynamic mapping cache. */
    232232static PPGMR0DYNMAP g_pPGMR0DynMap;
     233/** For overflow testing. */
     234static bool         g_fPGMR0DynMapTestRunning = false;
    233235
    234236
     
    13221324                {
    13231325                    RTSpinlockRelease(pThis->hSpinlock, &Tmp);
     1326                    *ppvPage = NULL;
    13241327                    return iPage;
    13251328                }
     
    13431346        ASMAtomicDecS32(&paPages[iPage].cRefs);
    13441347        RTSpinlockRelease(pThis->hSpinlock, &Tmp);
     1348        *ppvPage = NULL;
    13451349        AssertLogRelMsgFailedReturn(("cRefs=%d iPage=%p HCPhys=%RHp\n", cRefs, iPage, HCPhys), UINT32_MAX);
    13461350    }
     
    18051809    if (RT_UNLIKELY(iPage == UINT32_MAX))
    18061810    {
    1807         static uint32_t s_cBitched = 0;
    1808         if (++s_cBitched < 10)
    1809             LogRel(("PGMDynMapHCPage: cLoad=%u/%u cPages=%u cGuardPages=%u\n",
    1810                     g_pPGMR0DynMap->cLoad, g_pPGMR0DynMap->cMaxLoad, g_pPGMR0DynMap->cPages, g_pPGMR0DynMap->cGuardPages));
     1811        AssertMsg2("PGMDynMapHCPage: cLoad=%u/%u cPages=%u cGuardPages=%u\n",
     1812                   g_pPGMR0DynMap->cLoad, g_pPGMR0DynMap->cMaxLoad, g_pPGMR0DynMap->cPages, g_pPGMR0DynMap->cGuardPages);
     1813        if (!g_fPGMR0DynMapTestRunning)
     1814            VMMR0CallHost(pVM, VMMCALLHOST_VM_R0_ASSERTION, 0);
    18111815        *ppv = NULL;
    18121816        return VERR_PGM_DYNMAP_FAILED;
     
    19001904                pgmR0DynMapReleasePage(g_pPGMR0DynMap, iPage, 1);
    19011905
    1902                 static uint32_t s_cBitched = 0;
    1903                 if (++s_cBitched < 10)
    1904                     LogRel(("PGMDynMapHCPage: set is full!\n"));
     1906                AssertMsg2("PGMDynMapHCPage: set is full!\n");
     1907                if (!g_fPGMR0DynMapTestRunning)
     1908                    VMMR0CallHost(pVM, VMMCALLHOST_VM_R0_ASSERTION, 0);
    19051909                *ppv = NULL;
    19061910                return VERR_PGM_DYNMAP_FULL_SET;
     
    19901994    void           *pvR0DynMapUsedSaved = pVM->pgm.s.pvR0DynMapUsed;
    19911995    pVM->pgm.s.pvR0DynMapUsed = pThis;
     1996    g_fPGMR0DynMapTestRunning = true;
    19921997
    19931998    /*
     
    21762181        PGMR0DynMapAssertIntegrity();
    21772182
     2183    g_fPGMR0DynMapTestRunning = false;
    21782184    LogRel(("Result: rc=%Rrc Load=%u/%u/%u Set=%#x/%u\n", rc,
    21792185            pThis->cLoad, pThis->cMaxLoad, pThis->cPages - pThis->cPages, pSet->cEntries, RT_ELEMENTS(pSet->aEntries)));
Note: See TracChangeset for help on using the changeset viewer.

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