VirtualBox

Changeset 1823 in vbox for trunk/src/VBox


Ignore:
Timestamp:
Mar 30, 2007 11:29:22 AM (18 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
20009
Message:

Extra safety check.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/VMM/VMMAll/PGMAllBth.h

    r1821 r1823  
    16271627                 */
    16281628                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));
    16351638#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));
    16411644#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));
    16551661            }
    16561662        }
Note: See TracChangeset for help on using the changeset viewer.

© 2025 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette