- Timestamp:
- Feb 10, 2009 1:07:15 PM (16 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMAll/PGMAllPool.cpp
r16626 r16628 389 389 LogFlow(("pgmPoolMonitorChainChanging: Detected conflict at iShwPdpt=%#x iShw=%#x!\n", iShwPdpt, iShw)); 390 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 391 402 /* paranoia / a bit assumptive. */ 392 elseif ( pCpu393 394 403 if ( pCpu 404 && (off & 3) 405 && (off & 3) + cbWrite > 4) 395 406 { 396 407 const unsigned iShw2 = iShw + 2; 397 if ( iShw2 < RT_ELEMENTS(uShw.pPDPae->a) /** @todo was completely wrong, it's better now after #1865 but still wrong from cross PD. */ 398 && (uShw.pPDPae->a[iShw2].u & (PGM_PDFLAGS_MAPPING | X86_PDE_P)) == (PGM_PDFLAGS_MAPPING | X86_PDE_P)) 408 if (iShw2 < RT_ELEMENTS(uShw.pPDPae->a)) 399 409 { 400 Assert(pgmMapAreMappingsEnabled(&pPool->CTX_SUFF(pVM)->pgm.s)); 401 VM_FF_SET(pPool->CTX_SUFF(pVM), VM_FF_PGM_SYNC_CR3); 402 LogFlow(("pgmPoolMonitorChainChanging: Detected conflict at iShwPdpt=%#x iShw2=%#x!\n", iShwPdpt, iShw2)); 410 if ((uShw.pPDPae->a[iShw2].u & (PGM_PDFLAGS_MAPPING | X86_PDE_P)) == (PGM_PDFLAGS_MAPPING | X86_PDE_P)) 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; 425 } 403 426 } 404 427 } 405 #if 0 /* useful when running PGMAssertCR3(), a bit too troublesome for general use (TLBs). */406 if ( uShw.pPDPae->a[iShw].n.u1Present407 && !VM_FF_ISSET(pPool->CTX_SUFF(pVM), VM_FF_PGM_SYNC_CR3))408 {409 LogFlow(("pgmPoolMonitorChainChanging: iShwPdpt=%#x iShw=%#x: %RX64 -> freeing it!\n", iShwPdpt, iShw, uShw.pPDPae->a[iShw].u));410 # ifdef IN_RC /* TLB load - we're pushing things a bit... */411 ASMProbeReadByte(pvAddress);412 # endif413 pgmPoolFree(pPool->CTX_SUFF(pVM), uShw.pPDPae->a[iShw].u & X86_PDE_PAE_PG_MASK, pPage->idx, iShw + iShwPdpt * X86_PG_PAE_ENTRIES);414 uShw.pPDPae->a[iShw].u = 0;415 }416 #endif417 428 } 418 429 break;
Note:
See TracChangeset
for help on using the changeset viewer.