- Timestamp:
- Feb 11, 2009 1:17:20 PM (16 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMAll/PGMAllPool.cpp
r16661 r16663 393 393 VM_FF_SET(pPool->CTX_SUFF(pVM), VM_FF_PGM_SYNC_CR3); 394 394 LogFlow(("pgmPoolMonitorChainChanging: Detected conflict at iShwPdpt=%#x iShw=%#x!\n", iShwPdpt, iShw+i)); 395 break; 395 396 } 396 397 else … … 418 419 VM_FF_SET(pPool->CTX_SUFF(pVM), VM_FF_PGM_SYNC_CR3); 419 420 LogFlow(("pgmPoolMonitorChainChanging: Detected conflict at iShwPdpt=%#x iShw2=%#x!\n", iShwPdpt, iShw2)); 421 break; 420 422 } 421 423 else … … 492 494 STAM_COUNTER_INC(&(pPool->CTX_SUFF(pVM)->pgm.s.StatRZGuestCR3WriteConflict)); 493 495 LogFlow(("pgmPoolMonitorChainChanging: Detected conflict at iShw=%#x!\n", iShw)); 496 break; 494 497 } 498 # ifdef VBOX_WITH_PGMPOOL_PAGING_ONLY 499 else 500 { 501 if (uShw.pPD->a[iShw].n.u1Present) 502 { 503 LogFlow(("pgmPoolMonitorChainChanging: 32 bit pd iShw=%#x: %RX64 -> freeing it!\n", iShw, uShw.pPD->a[iShw].u)); 504 pgmPoolFree(pPool->CTX_SUFF(pVM), 505 uShw.pPD->a[iShw].u & X86_PDE_PAE_PG_MASK, 506 pPage->idx, 507 iShw); 508 uShw.pPD->a[iShw].u = 0; 509 } 510 } 511 # endif 495 512 /* paranoia / a bit assumptive. */ 496 elseif ( pCpu497 498 513 if ( pCpu 514 && (off & 3) 515 && (off & 3) + cbWrite > sizeof(X86PTE)) 499 516 { 500 517 const unsigned iShw2 = (off + cbWrite - 1) / sizeof(X86PTE); 501 518 if ( iShw2 != iShw 502 && iShw2 < RT_ELEMENTS(uShw.pPD->a) 503 && uShw.pPD->a[iShw2].u & PGM_PDFLAGS_MAPPING) 519 && iShw2 < RT_ELEMENTS(uShw.pPD->a)) 504 520 { 505 Assert(pgmMapAreMappingsEnabled(&pPool->CTX_SUFF(pVM)->pgm.s)); 506 STAM_COUNTER_INC(&(pPool->CTX_SUFF(pVM)->pgm.s.StatRZGuestCR3WriteConflict)); 507 VM_FF_SET(pPool->CTX_SUFF(pVM), VM_FF_PGM_SYNC_CR3); 508 LogFlow(("pgmPoolMonitorChainChanging: Detected conflict at iShw2=%#x!\n", iShw2)); 521 522 if (uShw.pPD->a[iShw2].u & PGM_PDFLAGS_MAPPING) 523 { 524 Assert(pgmMapAreMappingsEnabled(&pPool->CTX_SUFF(pVM)->pgm.s)); 525 STAM_COUNTER_INC(&(pPool->CTX_SUFF(pVM)->pgm.s.StatRZGuestCR3WriteConflict)); 526 VM_FF_SET(pPool->CTX_SUFF(pVM), VM_FF_PGM_SYNC_CR3); 527 LogFlow(("pgmPoolMonitorChainChanging: Detected conflict at iShw2=%#x!\n", iShw2)); 528 } 529 # ifdef VBOX_WITH_PGMPOOL_PAGING_ONLY 530 else 531 { 532 if (uShw.pPD->a[iShw2].n.u1Present) 533 { 534 LogFlow(("pgmPoolMonitorChainChanging: 32 bit pd iShw=%#x: %RX64 -> freeing it!\n", iShw2, uShw.pPD->a[iShw2].u)); 535 pgmPoolFree(pPool->CTX_SUFF(pVM), 536 uShw.pPD->a[iShw2].u & X86_PDE_PAE_PG_MASK, 537 pPage->idx, 538 iShw2); 539 uShw.pPD->a[iShw2].u = 0; 540 } 541 } 542 # endif 509 543 } 510 544 } … … 583 617 STAM_COUNTER_INC(&(pPool->CTX_SUFF(pVM)->pgm.s.StatRZGuestCR3WriteConflict)); 584 618 LogFlow(("pgmPoolMonitorChainChanging: Detected conflict at iShw=%#x!\n", iShw)); 619 break; 585 620 } 586 #if defined(PGMPOOL_INVALIDATE_UPPER_SHADOW_TABLE_ENTRIES) || defined(VBOX_WITH_PGMPOOL_PAGING_ONLY)621 #ifdef VBOX_WITH_PGMPOOL_PAGING_ONLY 587 622 /* 588 623 * Causes trouble when the guest uses a PDE to refer to the whole page table level … … 625 660 LogFlow(("pgmPoolMonitorChainChanging: Detected conflict at iShw2=%#x!\n", iShw2)); 626 661 } 627 #if defined(PGMPOOL_INVALIDATE_UPPER_SHADOW_TABLE_ENTRIES) || defined(VBOX_WITH_PGMPOOL_PAGING_ONLY)662 #ifdef VBOX_WITH_PGMPOOL_PAGING_ONLY 628 663 else if (uShw.pPDPae->a[iShw2].n.u1Present) 629 664 { … … 673 708 VM_FF_SET(pPool->CTX_SUFF(pVM), VM_FF_PGM_SYNC_CR3); 674 709 LogFlow(("pgmPoolMonitorChainChanging: Detected conflict at iShw=%#x!\n", iShw)); 710 break; 675 711 } 676 712 # ifdef VBOX_WITH_PGMPOOL_PAGING_ONLY
Note:
See TracChangeset
for help on using the changeset viewer.