Changeset 11711
- Timestamp:
- 08/27/08 18:08:15 (3 months ago)
- Files:
-
- trunk/src/VBox/VMM/PGMMap.cpp (modified) (1 diff)
- trunk/src/VBox/VMM/VMMAll/PGMAllGst.h (modified) (1 diff)
- trunk/src/VBox/VMM/VMMAll/PGMAllPool.cpp (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/src/VBox/VMM/PGMMap.cpp
r11311 r11711 450 450 pgmPoolFlushAll(pVM); 451 451 #endif 452 int rc = PGM_GST_PFN(MonitorCR3, pVM)(pVM, pVM->pgm.s.GCPhysCR3); 452 /* Remap CR3 as we have just flushed the CR3 shadow PML4 in case we're in long mode. */ 453 int rc = PGM_GST_PFN(MapCR3, pVM)(pVM, pVM->pgm.s.GCPhysCR3); 454 AssertRC(rc); 455 456 rc = PGM_GST_PFN(MonitorCR3, pVM)(pVM, pVM->pgm.s.GCPhysCR3); 453 457 AssertRC(rc); 454 458 trunk/src/VBox/VMM/VMMAll/PGMAllGst.h
r11533 r11711 494 494 if (pVM->pgm.s.pHCShwAmd64CR3) 495 495 { 496 pgmPoolFreeByPage(pPool, pVM->pgm.s.pHCShwAmd64CR3, PGMPOOL_IDX_AMD64_CR3, pVM->pgm.s.pHCShwAmd64CR3->GCPhys >> PAGE_SHIFT); 496 /* It might have been freed already by a pool flush (see e.g. PGMR3MappingsUnfix). */ 497 if (pgmPoolGetPage(pPool, pVM->pgm.s.pHCShwAmd64CR3->GCPhys)) 498 pgmPoolFreeByPage(pPool, pVM->pgm.s.pHCShwAmd64CR3, PGMPOOL_IDX_AMD64_CR3, pVM->pgm.s.pHCShwAmd64CR3->GCPhys >> PAGE_SHIFT); 497 499 pVM->pgm.s.pHCShwAmd64CR3 = 0; 498 500 pVM->pgm.s.pHCPaePML4 = 0; trunk/src/VBox/VMM/VMMAll/PGMAllPool.cpp
r11434 r11711 2024 2024 * Lazy approach. 2025 2025 */ 2026 /* @todo incompatible with long mode paging (cr3 root will be flushed) */ 2027 Assert(!CPUMIsGuestInLongMode(pVM)); 2026 2028 pgmPoolFlushAllInt(pPool); 2027 2029 return VERR_PGM_POOL_FLUSHED; … … 3731 3733 * a cheap replacement strategy... 3732 3734 */ 3735 /* @todo incompatible with long mode paging (cr3 root will be flushed) */ 3736 Assert(!CPUMIsGuestInLongMode(pVM)); 3733 3737 pgmPoolFlushAllInt(pPool); 3734 3738 return VERR_PGM_POOL_FLUSHED;

