VirtualBox

Changeset 14822 in vbox for trunk/src/VBox/VMM


Ignore:
Timestamp:
Nov 30, 2008 5:36:38 AM (16 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
40148
Message:

PGMR0DynMap: Fixed bug in previous pgmR0DynMapPageSlow bug fix. Bad index calculation. it was responsible for guest & host stability issues (wrong page & zone/heap corruption).

File:
1 edited

Legend:

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

    r14810 r14822  
    7575#if 0
    7676/* Assertions causes panics if preemption is disabled, this can be used to work aroudn that. */
    77 #define RTSpinlockAcquire(a,b) do {} while (0)
    78 #define RTSpinlockRelease(a,b) do {} while (0)
     77//#define RTSpinlockAcquire(a,b) do {} while (0)
     78//#define RTSpinlockRelease(a,b) do {} while (0)
    7979#endif
    8080
     
    318318        g_pPGMR0DynMap = NULL;
    319319
     320        /* This should *never* happen, but in case it does try not to leak memory. */
    320321        AssertLogRelMsg(!pThis->cUsers && !pThis->paPages && !pThis->pvSavedPTEs && !pThis->cPages,
    321322                        ("cUsers=%d paPages=%p pvSavedPTEs=%p cPages=%#x\n",
    322323                         pThis->cUsers, pThis->paPages, pThis->pvSavedPTEs, pThis->cPages));
     324        if (pThis->paPages)
     325            pgmR0DynMapTearDown(pThis);
    323326
    324327        /* Free the associated resources. */
     
    363366     * Do we need the cache? Skip the last bit if we don't.
    364367     */
    365 #if 1
    366368    if (!VMMIsHwVirtExtForced(pVM))
    367369        return VINF_SUCCESS;
    368 #endif
    369370
    370371    /*
     
    10661067            while (!ASMAtomicCmpXchgExU32(&paPages[iPage].uPte.pLegacy->u, uNew, uOld, &uOld))
    10671068                AssertMsgFailed(("uOld=%#x uOld2=%#x uNew=%#x\n", uOld, uOld2, uNew));
     1069            Assert(paPages[iPage].uPte.pLegacy->u == paSavedPTEs[iPage]);
    10681070        }
    10691071    }
     
    10781080            while (!ASMAtomicCmpXchgExU64(&paPages[iPage].uPte.pPae->u, uNew, uOld, &uOld))
    10791081                AssertMsgFailed(("uOld=%#llx uOld2=%#llx uNew=%#llx\n", uOld, uOld2, uNew));
     1082            Assert(paPages[iPage].uPte.pPae->u == paSavedPTEs[iPage]);
    10801083        }
    10811084    }
     
    11201123    pThis->cPages = 0;
    11211124    pThis->cLoad = 0;
     1125    pThis->cGuardPages = 0;
    11221126}
    11231127
     
    11751179        iFreePage = iPage;
    11761180    else if (!paPages[(iPage + 1) % cPages].cRefs)
    1177         iFreePage = iPage + 1;
     1181        iFreePage   = (iPage + 1) % cPages;
    11781182    else if (!paPages[(iPage + 2) % cPages].cRefs)
    1179         iFreePage = iPage + 2;
     1183        iFreePage   = (iPage + 2) % cPages;
    11801184    else if (!paPages[(iPage + 3) % cPages].cRefs)
    1181         iFreePage = iPage + 3;
     1185        iFreePage   = (iPage + 3) % cPages;
    11821186    else if (!paPages[(iPage + 4) % cPages].cRefs)
    1183         iFreePage = iPage + 4;
     1187        iFreePage   = (iPage + 4) % cPages;
    11841188    else
    11851189    {
     
    12011205        }
    12021206    }
     1207    Assert(iFreePage < cPages);
    12031208
    12041209    /*
     
    12171222        while (!ASMAtomicCmpXchgExU32(&paPages[iFreePage].uPte.pLegacy->u, uNew, uOld, &uOld))
    12181223            AssertMsgFailed(("uOld=%#x uOld2=%#x uNew=%#x\n", uOld, uOld2, uNew));
     1224        Assert(paPages[iPage].uPte.pLegacy->u == uNew);
    12191225    }
    12201226    else
     
    12271233        while (!ASMAtomicCmpXchgExU64(&paPages[iFreePage].uPte.pPae->u, uNew, uOld, &uOld))
    12281234            AssertMsgFailed(("uOld=%#llx uOld2=%#llx uNew=%#llx\n", uOld, uOld2, uNew));
     1235        Assert(paPages[iPage].uPte.pPae->u == uNew);
    12291236        /*Log6(("pgmR0DynMapPageSlow: #%x - %RHp %p %#llx\n", iFreePage, HCPhys, paPages[iFreePage].pvPage, uNew));*/
    12301237    }
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