Changeset 22506 in vbox
- Timestamp:
- Aug 27, 2009 11:28:43 AM (15 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMAll/PGMAllPool.cpp
r22504 r22506 1286 1286 && !fForcedFlush 1287 1287 && pPage->enmKind == PGMPOOLKIND_PAE_PT_FOR_PAE_PT 1288 && pPage->cModifications >= cMaxModifications 1289 && pPage->iMonitoredNext != NIL_PGMPOOL_IDX 1290 && pPage->iMonitoredPrev != NIL_PGMPOOL_IDX) 1288 && pPage->cModifications >= cMaxModifications) 1291 1289 { 1292 1290 Assert(!pgmPoolIsPageLocked(&pVM->pgm.s, pPage)); 1293 1291 Assert(pPage->fDirty == false); 1294 1292 1293 /* Flush any monitored duplicates as we will disable write protection. */ 1294 if ( pPage->iMonitoredNext != NIL_PGMPOOL_IDX 1295 || pPage->iMonitoredPrev != NIL_PGMPOOL_IDX) 1296 { 1297 PPGMPOOLPAGE pPageHead = pPage; 1298 1299 /* Find the monitor head. */ 1300 while (pPageHead->iMonitoredPrev != NIL_PGMPOOL_IDX) 1301 pPageHead = &pPool->aPages[pPageHead->iMonitoredPrev]; 1302 1303 while (pPageHead) 1304 { 1305 unsigned idxNext = pPageHead->iMonitoredNext; 1306 1307 if (pPageHead != pPage) 1308 { 1309 Log(("Flush duplicate page idx=%d GCPhys=%RGp type=%s\n", pPageHead->idx, pPageHead->GCPhys, pgmPoolPoolKindToStr(pPageHead->enmKind))); 1310 int rc2 = pgmPoolFlushPage(pPool, pPageHead); 1311 AssertRC(rc2); 1312 } 1313 1314 if (idxNext == NIL_PGMPOOL_IDX) 1315 break; 1316 1317 pPageHead = &pPool->aPages[idxNext]; 1318 } 1319 } 1320 1321 /* Temporarily allow write access to the page table again. */ 1295 1322 rc = PGMHandlerPhysicalPageTempOff(pVM, pPage->GCPhys, pPage->GCPhys); 1296 1323 if (rc == VINF_SUCCESS)
Note:
See TracChangeset
for help on using the changeset viewer.