- Timestamp:
- Feb 10, 2009 2:54:02 PM (16 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMAll/PGMAllPool.cpp
r16628 r16634 383 383 if (iShwPdpt == pPage->enmKind - PGMPOOLKIND_PAE_PD0_FOR_32BIT_PD) 384 384 { 385 if ((uShw.pPDPae->a[iShw].u & (PGM_PDFLAGS_MAPPING | X86_PDE_P)) == (PGM_PDFLAGS_MAPPING | X86_PDE_P))385 for (unsigned i=0;i<2;i++) 386 386 { 387 Assert(pgmMapAreMappingsEnabled(&pPool->CTX_SUFF(pVM)->pgm.s)); 388 VM_FF_SET(pPool->CTX_SUFF(pVM), VM_FF_PGM_SYNC_CR3); 389 LogFlow(("pgmPoolMonitorChainChanging: Detected conflict at iShwPdpt=%#x iShw=%#x!\n", iShwPdpt, iShw)); 390 } 391 else 392 if (uShw.pPDPae->a[iShw].n.u1Present) 393 { 394 LogFlow(("pgmPoolMonitorChainChanging: pae pd iShw=%#x: %RX64 -> freeing it!\n", iShw, uShw.pPDPae->a[iShw].u)); 395 pgmPoolFree(pPool->CTX_SUFF(pVM), 396 uShw.pPDPae->a[iShw].u & X86_PDE_PAE_PG_MASK, 397 pPage->idx, 398 iShw); 399 uShw.pPDPae->a[iShw].u = 0; 400 } 401 402 /* paranoia / a bit assumptive. */ 403 if ( pCpu 404 && (off & 3) 405 && (off & 3) + cbWrite > 4) 406 { 407 const unsigned iShw2 = iShw + 2; 408 if (iShw2 < RT_ELEMENTS(uShw.pPDPae->a)) 387 if ((uShw.pPDPae->a[iShw + i].u & (PGM_PDFLAGS_MAPPING | X86_PDE_P)) == (PGM_PDFLAGS_MAPPING | X86_PDE_P)) 409 388 { 410 if ((uShw.pPDPae->a[iShw2].u & (PGM_PDFLAGS_MAPPING | X86_PDE_P)) == (PGM_PDFLAGS_MAPPING | X86_PDE_P)) 389 Assert(pgmMapAreMappingsEnabled(&pPool->CTX_SUFF(pVM)->pgm.s)); 390 VM_FF_SET(pPool->CTX_SUFF(pVM), VM_FF_PGM_SYNC_CR3); 391 LogFlow(("pgmPoolMonitorChainChanging: Detected conflict at iShwPdpt=%#x iShw=%#x!\n", iShwPdpt, iShw+i)); 392 } 393 else 394 if (uShw.pPDPae->a[iShw+i].n.u1Present) 395 { 396 LogFlow(("pgmPoolMonitorChainChanging: pae pd iShw=%#x: %RX64 -> freeing it!\n", iShw+i, uShw.pPDPae->a[iShw+i].u)); 397 pgmPoolFree(pPool->CTX_SUFF(pVM), 398 uShw.pPDPae->a[iShw+i].u & X86_PDE_PAE_PG_MASK, 399 pPage->idx, 400 iShw + i); 401 uShw.pPDPae->a[iShw+i].u = 0; 402 } 403 404 /* paranoia / a bit assumptive. */ 405 if ( pCpu 406 && (off & 3) 407 && (off & 3) + cbWrite > 4) 408 { 409 const unsigned iShw2 = iShw + 2 + i; 410 if (iShw2 < RT_ELEMENTS(uShw.pPDPae->a)) 411 411 { 412 Assert(pgmMapAreMappingsEnabled(&pPool->CTX_SUFF(pVM)->pgm.s)); 413 VM_FF_SET(pPool->CTX_SUFF(pVM), VM_FF_PGM_SYNC_CR3); 414 LogFlow(("pgmPoolMonitorChainChanging: Detected conflict at iShwPdpt=%#x iShw2=%#x!\n", iShwPdpt, iShw2)); 415 } 416 else 417 if (uShw.pPDPae->a[iShw2].n.u1Present) 418 { 419 LogFlow(("pgmPoolMonitorChainChanging: pae pd iShw=%#x: %RX64 -> freeing it!\n", iShw2, uShw.pPDPae->a[iShw2].u)); 420 pgmPoolFree(pPool->CTX_SUFF(pVM), 421 uShw.pPDPae->a[iShw2].u & X86_PDE_PAE_PG_MASK, 422 pPage->idx, 423 iShw2); 424 uShw.pPDPae->a[iShw2].u = 0; 412 if ((uShw.pPDPae->a[iShw2].u & (PGM_PDFLAGS_MAPPING | X86_PDE_P)) == (PGM_PDFLAGS_MAPPING | X86_PDE_P)) 413 { 414 Assert(pgmMapAreMappingsEnabled(&pPool->CTX_SUFF(pVM)->pgm.s)); 415 VM_FF_SET(pPool->CTX_SUFF(pVM), VM_FF_PGM_SYNC_CR3); 416 LogFlow(("pgmPoolMonitorChainChanging: Detected conflict at iShwPdpt=%#x iShw2=%#x!\n", iShwPdpt, iShw2)); 417 } 418 else 419 if (uShw.pPDPae->a[iShw2].n.u1Present) 420 { 421 LogFlow(("pgmPoolMonitorChainChanging: pae pd iShw=%#x: %RX64 -> freeing it!\n", iShw2, uShw.pPDPae->a[iShw2].u)); 422 pgmPoolFree(pPool->CTX_SUFF(pVM), 423 uShw.pPDPae->a[iShw2].u & X86_PDE_PAE_PG_MASK, 424 pPage->idx, 425 iShw2); 426 uShw.pPDPae->a[iShw2].u = 0; 427 } 425 428 } 426 429 }
Note:
See TracChangeset
for help on using the changeset viewer.