Changeset 1823 in vbox for trunk/src/VBox
- Timestamp:
- Mar 30, 2007 11:29:22 AM (18 years ago)
- svn:sync-xref-src-repo-rev:
- 20009
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMAll/PGMAllBth.h
r1821 r1823 1627 1627 */ 1628 1628 PPGMPOOLPAGE pShwPage = pgmPoolGetPageByHCPhys(pVM, pPdeDst->u & SHW_PDE_PG_MASK); 1629 PSHWPT pPTDst = (PSHWPT)PGMPOOL_PAGE_2_PTR(pVM, pShwPage); 1630 PSHWPTE pPteDst = &pPTDst->a[(GCPtrPage >> SHW_PT_SHIFT) & SHW_PT_MASK]; 1631 if ( pPteDst->n.u1Present /** @todo Optimize accessed bit emulation? */ 1632 && (pPteDst->u & PGM_PTFLAGS_TRACK_DIRTY)) 1633 { 1634 LogFlow(("DIRTY page trap addr=%VGv\n", GCPtrPage)); 1629 1630 if (pShwPage) 1631 { 1632 PSHWPT pPTDst = (PSHWPT)PGMPOOL_PAGE_2_PTR(pVM, pShwPage); 1633 PSHWPTE pPteDst = &pPTDst->a[(GCPtrPage >> SHW_PT_SHIFT) & SHW_PT_MASK]; 1634 if ( pPteDst->n.u1Present /** @todo Optimize accessed bit emulation? */ 1635 && (pPteDst->u & PGM_PTFLAGS_TRACK_DIRTY)) 1636 { 1637 LogFlow(("DIRTY page trap addr=%VGv\n", GCPtrPage)); 1635 1638 #ifdef VBOX_STRICT 1636 RTHCPHYS HCPhys;1637 rc = PGMRamGCPhys2HCPhysWithFlags(&pVM->pgm.s, pPteSrc->u & X86_PTE_PG_MASK, &HCPhys);1638 if (VBOX_SUCCESS(rc))1639 AssertMsg(!(HCPhys & (MM_RAM_FLAGS_PHYSICAL_ALL | MM_RAM_FLAGS_VIRTUAL_ALL | MM_RAM_FLAGS_PHYSICAL_WRITE | MM_RAM_FLAGS_VIRTUAL_WRITE)),1640 ("Unexpected dirty bit tracking on monitored page %VGv (phys %VGp)!!!!!!\n", GCPtrPage, pPteSrc->u & X86_PTE_PAE_PG_MASK));1639 RTHCPHYS HCPhys; 1640 rc = PGMRamGCPhys2HCPhysWithFlags(&pVM->pgm.s, pPteSrc->u & X86_PTE_PG_MASK, &HCPhys); 1641 if (VBOX_SUCCESS(rc)) 1642 AssertMsg(!(HCPhys & (MM_RAM_FLAGS_PHYSICAL_ALL | MM_RAM_FLAGS_VIRTUAL_ALL | MM_RAM_FLAGS_PHYSICAL_WRITE | MM_RAM_FLAGS_VIRTUAL_WRITE)), 1643 ("Unexpected dirty bit tracking on monitored page %VGv (phys %VGp)!!!!!!\n", GCPtrPage, pPteSrc->u & X86_PTE_PAE_PG_MASK)); 1641 1644 #endif 1642 STAM_COUNTER_INC(&pVM->pgm.s.CTXMID(Stat,DirtyPageTrap)); 1643 1644 Assert(pPteSrc->n.u1Write); 1645 1646 pPteDst->n.u1Write = 1; 1647 pPteDst->n.u1Dirty = 1; 1648 pPteDst->n.u1Accessed = 1; 1649 pPteDst->au32[0] &= ~PGM_PTFLAGS_TRACK_DIRTY; 1650 PGM_INVL_PG(GCPtrPage); 1651 1652 STAM_PROFILE_STOP(&pVM->pgm.s.CTXMID(Stat,DirtyBitTracking), a); 1653 return VINF_PGM_HANDLED_DIRTY_BIT_FAULT; 1654 } 1645 STAM_COUNTER_INC(&pVM->pgm.s.CTXMID(Stat,DirtyPageTrap)); 1646 1647 Assert(pPteSrc->n.u1Write); 1648 1649 pPteDst->n.u1Write = 1; 1650 pPteDst->n.u1Dirty = 1; 1651 pPteDst->n.u1Accessed = 1; 1652 pPteDst->au32[0] &= ~PGM_PTFLAGS_TRACK_DIRTY; 1653 PGM_INVL_PG(GCPtrPage); 1654 1655 STAM_PROFILE_STOP(&pVM->pgm.s.CTXMID(Stat,DirtyBitTracking), a); 1656 return VINF_PGM_HANDLED_DIRTY_BIT_FAULT; 1657 } 1658 } 1659 else 1660 AssertMsgFailed(("pgmPoolGetPageByHCPhys %VGp failed!\n", pPdeDst->u & SHW_PDE_PG_MASK)); 1655 1661 } 1656 1662 }
Note:
See TracChangeset
for help on using the changeset viewer.