VirtualBox

Changeset 4714 in vbox


Ignore:
Timestamp:
Sep 11, 2007 4:30:42 PM (17 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
24386
Message:

ZeroPg

Location:
trunk/src/VBox/VMM
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/VMM/PGM.cpp

    r4713 r4714  
    925925        return rc;
    926926
    927     /* Initialise PGM critical section. */
     927    /*
     928     * Initialize the PGM critical section and flush the phys TLBs
     929     */
    928930    rc = PDMR3CritSectInit(pVM, &pVM->pgm.s.CritSect, "PGM");
    929931    AssertRCReturn(rc, rc);
    930932
    931     /*
    932      * Invalidate the TLBs.
    933      */
    934933    PGMR3PhysChunkInvalidateTLB(pVM);
    935934    PGMPhysInvalidatePageR3MapTLB(pVM);
     
    944943    {
    945944        pVM->pgm.s.pTreesGC = MMHyperHC2GC(pVM, pVM->pgm.s.pTreesHC);
     945
     946        /*
     947         * Alocate the zero page.
     948         */
     949        rc = MMHyperAlloc(pVM, PAGE_SIZE, PAGE_SIZE, MM_TAG_PGM, &pVM->pgm.s.pvZeroPgR3);
     950    }
     951    if (VBOX_SUCCESS(rc))
     952    {
     953        pVM->pgm.s.pvZeroPgGC = MMHyperR3ToGC(pVM, pVM->pgm.s.pvZeroPgR3);
     954        pVM->pgm.s.pvZeroPgR0 = MMHyperR3ToR0(pVM, pVM->pgm.s.pvZeroPgR3);
     955        AssertRelease(pVM->pgm.s.pvZeroPgR0 != NIL_RTHCPHYS);
     956        pVM->pgm.s.HCPhysZeroPg = MMR3HyperHCVirt2HCPhys(pVM, pVM->pgm.s.pvZeroPgR3);
     957        AssertRelease(pVM->pgm.s.HCPhysZeroPg != NIL_RTHCPHYS);
    946958
    947959        /*
     
    9951007        return VINF_SUCCESS;
    9961008    }
    997     /* No cleanup necessary, MM frees all memory. */
     1009
     1010    /* Almost no cleanup necessary, MM frees all memory. */
     1011    PDMR3CritSectDelete(&pVM->pgm.s.CritSect);
    9981012
    9991013    return rc;
     
    16081622    pVM->pgm.s.paDynPageMapPaePTEsGC += offDelta;
    16091623    pVM->pgm.s.pbDynPageMapBaseGC += offDelta;
     1624
     1625    /*
     1626     * The Zero page.
     1627     */
     1628    pVM->pgm.s.pvZeroPgR0 = MMHyperR3ToR0(pVM, pVM->pgm.s.pvZeroPgR3);
     1629    AssertRelease(pVM->pgm.s.pvZeroPgR0);
    16101630
    16111631    /*
  • trunk/src/VBox/VMM/PGMInternal.h

    r4713 r4714  
    18351835    PGMPAGER3MAPTLB                 PhysTlbHC;
    18361836
     1837    /** @name   The zero page.
     1838     * @{ */
     1839    /** The host physical address of the zero page. */
     1840    RTHCPHYS                        HCPhysZeroPg;
     1841    /** The ring-3 mapping of the zero page. */
     1842    RTR3PTR                         pvZeroPgR3;
     1843    /** The ring-0 mapping of the zero page. */
     1844    RTR0PTR                         pvZeroPgR0;
     1845    /** The GC mapping of the zero page. */
     1846    RTGCPTR                         pvZeroPgGC;
     1847#if GC_ARCH_BITS == 32
     1848    uint32_t                        u32ZeroAlignment; /**< Alignment padding. */
     1849#endif
     1850    /** @}*/
     1851
    18371852    /** @name Release Statistics
    18381853     * @{ */
  • trunk/src/VBox/VMM/VMMAll/PGMAllPhys.cpp

    r4713 r4714  
    250250    *ppMap = NULL;
    251251    RTHCPHYS HCPhys = PGM_PAGE_GET_HCPHYS(pPage);
    252     /** @todo  Assert(HCPhys != pVM->pgm.s.HCPhysZeroPg); */
     252    Assert(HCPhys != pVM->pgm.s.HCPhysZeroPg);
    253253    return PGMGCDynMapHCPage(pVM, HCPhys, ppv);
    254254
     
    298298    {
    299299        Assert(PGM_PAGE_IS_ZERO(pPage));
    300         ///@todo *ppv = pVM->pgm.s.pvZeroPgR3;
     300        *ppv = pVM->pgm.s.CTXALLSUFF(pvZeroPg);
    301301        *ppMap = NULL;
    302302        return VINF_SUCCESS;
     
    359359    else
    360360    {
    361         /** @todo Assert(PGM_PAGE_GET_HCPHYS(pPage) == pPGM->HCPhysZeroPg); */
     361        Assert(PGM_PAGE_GET_HCPHYS(pPage) == pPGM->HCPhysZeroPg);
    362362        pTlbe->pMap = NULL;
    363         /** @todo pTlbe->pv = pPGM->pvZeroPgR3; */
     363        pTlbe->pv = pPGM->CTXALLSUFF(pvZeroPg);
    364364    }
    365365    pTlbe->pPage = pPage;
  • trunk/src/VBox/VMM/testcase/tstVMStructGC.cpp

    r4620 r4714  
    407407    GEN_CHECK_OFF(PGM, pgmphysreadcache);
    408408    GEN_CHECK_OFF(PGM, pgmphyswritecache);
     409    GEN_CHECK_OFF(PGM, ChunkR3Map);
     410    GEN_CHECK_OFF(PGM, ChunkR3Map.pTree);
     411    GEN_CHECK_OFF(PGM, ChunkR3Map.Tlb);
     412    GEN_CHECK_OFF(PGM, ChunkR3Map.c);
     413    GEN_CHECK_OFF(PGM, ChunkR3Map.cMax);
     414    GEN_CHECK_OFF(PGM, ChunkR3Map.iNow);
     415    GEN_CHECK_OFF(PGM, ChunkR3Map.AgeingCountdown);
     416    GEN_CHECK_OFF(PGM, PhysTlbHC);
     417    GEN_CHECK_OFF(PGM, PhysTlbHC.aEntries[0]);
     418    GEN_CHECK_OFF(PGM, PhysTlbHC.aEntries[1]);
     419    GEN_CHECK_OFF(PGM, PhysTlbHC.aEntries[1].GCPhys);
     420    GEN_CHECK_OFF(PGM, PhysTlbHC.aEntries[1].pMap);
     421    GEN_CHECK_OFF(PGM, PhysTlbHC.aEntries[1].pPage);
     422    GEN_CHECK_OFF(PGM, PhysTlbHC.aEntries[1].pv);
     423    GEN_CHECK_OFF(PGM, HCPhysZeroPg);
     424    GEN_CHECK_OFF(PGM, pvZeroPgR3);
     425    GEN_CHECK_OFF(PGM, pvZeroPgR0);
     426    GEN_CHECK_OFF(PGM, pvZeroPgGC);
     427
    409428    GEN_CHECK_SIZE(PGMMAPPING);
    410429    GEN_CHECK_OFF(PGMMAPPING, pNextR3);
Note: See TracChangeset for help on using the changeset viewer.

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