VirtualBox

Changeset 17468 in vbox for trunk/src


Ignore:
Timestamp:
Mar 6, 2009 1:39:14 PM (16 years ago)
Author:
vboxsync
Message:

Always free entry if it's not a hypervisor mapping

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/VMM/VMMAll/PGMAllMap.cpp

    r17445 r17468  
    248248                AssertFatal(pShw32BitPd);
    249249
    250                 if (pShw32BitPd->a[iNewPDE].n.u1Present)
    251                 {
    252                     Assert(!(pShw32BitPd->a[iNewPDE].u & PGM_PDFLAGS_MAPPING));
     250                if (    pShw32BitPd->a[iNewPDE].n.u1Present
     251                    &&  !(pShw32BitPd->a[iNewPDE].u & PGM_PDFLAGS_MAPPING))
     252                {
    253253                    pgmPoolFree(pVM, pShw32BitPd->a[iNewPDE].u & X86_PDE_PG_MASK, pVM->pgm.s.CTX_SUFF(pShwPageCR3)->idx, iNewPDE);
    254254                }
     
    310310                    /* Mark the page as locked; disallow flushing. */
    311311                    pgmPoolLockPage(pVM->pgm.s.CTX_SUFF(pPool), pPoolPagePd);
    312 
    313                     if (pShwPaePd->a[iPDE].n.u1Present)
    314                     {
    315                         Assert(!(pShwPaePd->a[iPDE].u & PGM_PDFLAGS_MAPPING));
    316                         pgmPoolFree(pVM, pShwPaePd->a[iPDE].u & X86_PDE_PG_MASK, pPoolPagePd->idx, iPDE);
    317                     }
    318312                }
    319313# ifdef VBOX_STRICT
    320                 else
    321                 {
    322                     if (pShwPaePd->a[iPDE].u & PGM_PDFLAGS_MAPPING)
    323                     {
    324                         Assert(PGMGetGuestMode(pVM) >= PGMMODE_PAE);
    325                         AssertFatalMsg((pShwPaePd->a[iPDE].u & X86_PDE_PG_MASK) == pMap->aPTs[i].HCPhysPaePT0, ("%RX64 vs %RX64\n", pShwPaePd->a[iPDE+1].u & X86_PDE_PG_MASK, pMap->aPTs[i].HCPhysPaePT0));
    326                         Assert(pShwPaePd->a[iPDE+1].u & PGM_PDFLAGS_MAPPING);
    327                         AssertFatalMsg((pShwPaePd->a[iPDE+1].u & X86_PDE_PG_MASK) == pMap->aPTs[i].HCPhysPaePT1, ("%RX64 vs %RX64\n", pShwPaePd->a[iPDE+1].u & X86_PDE_PG_MASK, pMap->aPTs[i].HCPhysPaePT1));
    328                     }
     314                else
     315                if (pShwPaePd->a[iPDE].u & PGM_PDFLAGS_MAPPING)
     316                {
     317                    Assert(PGMGetGuestMode(pVM) >= PGMMODE_PAE);
     318                    AssertFatalMsg((pShwPaePd->a[iPDE].u & X86_PDE_PG_MASK) == pMap->aPTs[i].HCPhysPaePT0, ("%RX64 vs %RX64\n", pShwPaePd->a[iPDE+1].u & X86_PDE_PG_MASK, pMap->aPTs[i].HCPhysPaePT0));
     319                    Assert(pShwPaePd->a[iPDE+1].u & PGM_PDFLAGS_MAPPING);
     320                    AssertFatalMsg((pShwPaePd->a[iPDE+1].u & X86_PDE_PG_MASK) == pMap->aPTs[i].HCPhysPaePT1, ("%RX64 vs %RX64\n", pShwPaePd->a[iPDE+1].u & X86_PDE_PG_MASK, pMap->aPTs[i].HCPhysPaePT1));
    329321                }
    330322# endif
     323                if (    pShwPaePd->a[iPDE].n.u1Present
     324                    &&  !(pShwPaePd->a[iPDE].u & PGM_PDFLAGS_MAPPING))
     325                {
     326                    Assert(!(pShwPaePd->a[iPDE].u & PGM_PDFLAGS_MAPPING));
     327                    pgmPoolFree(pVM, pShwPaePd->a[iPDE].u & X86_PDE_PG_MASK, pPoolPagePd->idx, iPDE);
     328                }
     329
    331330#else
    332331                if (pShwPaePd->a[iPDE].n.u1Present)
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