VirtualBox

Changeset 17639 in vbox


Ignore:
Timestamp:
Mar 10, 2009 3:31:20 PM (16 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
44119
Message:

More locking required for dynamic mappings in RC.

File:
1 edited

Legend:

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

    r17612 r17639  
    245245                PX86PD pShw32BitPd = pgmShwGet32BitPDPtr(&pVM->pgm.s);
    246246                AssertFatal(pShw32BitPd);
    247 
     247#ifdef IN_RC    /* Lock mapping to prevent it from being reused during pgmPoolFree. */
     248                PGMDynLockHCPage(pVM, (uint8_t *)pShw32BitPd);
     249#endif
    248250                if (    pShw32BitPd->a[iNewPDE].n.u1Present
    249251                    &&  !(pShw32BitPd->a[iNewPDE].u & PGM_PDFLAGS_MAPPING))
     
    256258                Pde.u = PGM_PDFLAGS_MAPPING | X86_PDE_P | X86_PDE_A | X86_PDE_RW | X86_PDE_US | (uint32_t)pMap->aPTs[i].HCPhysPT;
    257259                pShw32BitPd->a[iNewPDE]   = Pde;
     260#ifdef IN_RC
     261                /* Unlock dynamic mappings again. */
     262                PGMDynUnlockHCPage(pVM, (uint8_t *)pShw32BitPd);
     263#endif
    258264                break;
    259265            }
     
    269275                pShwPdpt  = pgmShwGetPaePDPTPtr(&pVM->pgm.s);
    270276                Assert(pShwPdpt);
     277#ifdef IN_RC    /* Lock mapping to prevent it from being reused during pgmShwSyncPaePDPtr. */
     278                PGMDynLockHCPage(pVM, (uint8_t *)pShwPdpt);
     279#endif
    271280                pShwPaePd = pgmShwGetPaePDPtr(&pVM->pgm.s, (iPdPt << X86_PDPT_SHIFT));
    272281                if (!pShwPaePd)
     
    297306                }
    298307                Assert(pShwPaePd);
    299 
     308#ifdef IN_RC    /* Lock mapping to prevent it from being reused during pgmPoolFree. */
     309                PGMDynLockHCPage(pVM, (uint8_t *)pShwPaePd);
     310#endif
    300311                PPGMPOOLPAGE pPoolPagePd = pgmPoolGetPageByHCPhys(pVM, pShwPdpt->a[iPdPt].u & X86_PDPE_PG_MASK);
    301312                AssertFatal(pPoolPagePd);
     
    342353                /* Set the PGM_PDFLAGS_MAPPING flag in the page directory pointer entry. (legacy PAE guest mode) */
    343354                pShwPdpt->a[iPdPt].u |= PGM_PLXFLAGS_MAPPING;
     355
     356#ifdef IN_RC
     357                /* Unlock dynamic mappings again. */
     358                PGMDynUnlockHCPage(pVM, (uint8_t *)pShwPaePd);
     359                PGMDynUnlockHCPage(pVM, (uint8_t *)pShwPdpt);
     360#endif
    344361                break;
    345362            }
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