VirtualBox

Changeset 14301 in vbox for trunk/src/VBox/VMM/PGM.cpp


Ignore:
Timestamp:
Nov 18, 2008 1:31:42 PM (16 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
39488
Message:

Synced some (inactive) new paging code.

File:
1 edited

Legend:

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

    r14260 r14301  
    14131413     * As with the intermediate context, AMD64 uses the PAE PDPT and PDs.
    14141414     */
     1415#ifndef VBOX_WITH_PGMPOOL_PAGING_ONLY
    14151416    pVM->pgm.s.pShw32BitPdR3    = (PX86PD)MMR3PageAllocLow(pVM);
    1416 #ifndef VBOX_WITH_2X_4GB_ADDR_SPACE
     1417# ifndef VBOX_WITH_2X_4GB_ADDR_SPACE
    14171418    pVM->pgm.s.pShw32BitPdR0    = (uintptr_t)pVM->pgm.s.pShw32BitPdR3;
    1418 #endif
     1419# endif
    14191420    pVM->pgm.s.apShwPaePDsR3[0] = (PX86PDPAE)MMR3PageAlloc(pVM);
    14201421    pVM->pgm.s.apShwPaePDsR3[1] = (PX86PDPAE)MMR3PageAlloc(pVM);
     
    14241425    pVM->pgm.s.apShwPaePDsR3[3] = (PX86PDPAE)MMR3PageAlloc(pVM);
    14251426    AssertRelease((uintptr_t)pVM->pgm.s.apShwPaePDsR3[2] + PAGE_SIZE == (uintptr_t)pVM->pgm.s.apShwPaePDsR3[3]);
    1426 #ifndef VBOX_WITH_2X_4GB_ADDR_SPACE
     1427# ifndef VBOX_WITH_2X_4GB_ADDR_SPACE
    14271428    pVM->pgm.s.apShwPaePDsR0[0] = (uintptr_t)pVM->pgm.s.apShwPaePDsR3[0];
    14281429    pVM->pgm.s.apShwPaePDsR0[1] = (uintptr_t)pVM->pgm.s.apShwPaePDsR3[1];
    14291430    pVM->pgm.s.apShwPaePDsR0[2] = (uintptr_t)pVM->pgm.s.apShwPaePDsR3[2];
    14301431    pVM->pgm.s.apShwPaePDsR0[3] = (uintptr_t)pVM->pgm.s.apShwPaePDsR3[3];
    1431 #endif
     1432# endif
    14321433    pVM->pgm.s.pShwPaePdptR3 = (PX86PDPT)MMR3PageAllocLow(pVM);
    1433 #ifndef VBOX_WITH_2X_4GB_ADDR_SPACE
     1434# ifndef VBOX_WITH_2X_4GB_ADDR_SPACE
    14341435    pVM->pgm.s.pShwPaePdptR0 = (uintptr_t)pVM->pgm.s.pShwPaePdptR3;
    1435 #endif
     1436# endif
     1437#endif /* VBOX_WITH_PGMPOOL_PAGING_ONLY */
    14361438    pVM->pgm.s.pShwNestedRootR3 = MMR3PageAllocLow(pVM);
    14371439#ifndef VBOX_WITH_2X_4GB_ADDR_SPACE
     
    14391441#endif
    14401442
     1443#ifdef VBOX_WITH_PGMPOOL_PAGING_ONLY
     1444    if (!pVM->pgm.s.pShwNestedRootR3)
     1445#else
    14411446    if (    !pVM->pgm.s.pShw32BitPdR3
    14421447        ||  !pVM->pgm.s.apShwPaePDsR3[0]
     
    14461451        ||  !pVM->pgm.s.pShwPaePdptR3
    14471452        ||  !pVM->pgm.s.pShwNestedRootR3)
     1453#endif
    14481454    {
    14491455        AssertMsgFailed(("Failed to allocate pages for the intermediate context!\n"));
     
    14521458
    14531459    /* get physical addresses. */
     1460#ifndef VBOX_WITH_PGMPOOL_PAGING_ONLY
    14541461    pVM->pgm.s.HCPhysShw32BitPD = MMPage2Phys(pVM, pVM->pgm.s.pShw32BitPdR3);
    14551462    Assert(MMPagePhys2Page(pVM, pVM->pgm.s.HCPhysShw32BitPD) == pVM->pgm.s.pShw32BitPdR3);
     
    14591466    pVM->pgm.s.aHCPhysPaePDs[3] = MMPage2Phys(pVM, pVM->pgm.s.apShwPaePDsR3[3]);
    14601467    pVM->pgm.s.HCPhysShwPaePdpt = MMPage2Phys(pVM, pVM->pgm.s.pShwPaePdptR3);
     1468#endif
    14611469    pVM->pgm.s.HCPhysShwNestedRoot = MMPage2Phys(pVM, pVM->pgm.s.pShwNestedRootR3);
    14621470
     
    14641472     * Initialize the pages, setting up the PML4 and PDPT for action below 4GB.
    14651473     */
     1474#ifndef VBOX_WITH_PGMPOOL_PAGING_ONLY
    14661475    ASMMemZero32(pVM->pgm.s.pShw32BitPdR3, PAGE_SIZE);
    14671476    ASMMemZero32(pVM->pgm.s.pShwPaePdptR3, PAGE_SIZE);
     1477#endif
    14681478    ASMMemZero32(pVM->pgm.s.pShwNestedRootR3, PAGE_SIZE);
     1479#ifndef VBOX_WITH_PGMPOOL_PAGING_ONLY
    14691480    for (unsigned i = 0; i < RT_ELEMENTS(pVM->pgm.s.apShwPaePDsR3); i++)
    14701481    {
     
    14751486
    14761487    CPUMSetHyperCR3(pVM, (uint32_t)pVM->pgm.s.HCPhysShw32BitPD);
     1488#endif
    14771489
    14781490    /*
     
    15151527        LogFlow(("pgmR3InitPaging: returns successfully\n"));
    15161528#if HC_ARCH_BITS == 64
     1529# ifndef VBOX_WITH_PGMPOOL_PAGING_ONLY
    15171530        LogRel(("Debug: HCPhysShw32BitPD=%RHp aHCPhysPaePDs={%RHp,%RHp,%RHp,%RHp} HCPhysShwPaePdpt=%RHp HCPhysShwPaePml4=%RHp\n",
    15181531                pVM->pgm.s.HCPhysShw32BitPD,
     
    15201533                pVM->pgm.s.HCPhysShwPaePdpt,
    15211534                pVM->pgm.s.HCPhysShwPaePml4));
     1535# endif
    15221536        LogRel(("Debug: HCPhysInterPD=%RHp HCPhysInterPaePDPT=%RHp HCPhysInterPaePML4=%RHp\n",
    15231537                pVM->pgm.s.HCPhysInterPD, pVM->pgm.s.HCPhysInterPaePDPT, pVM->pgm.s.HCPhysInterPaePML4));
     
    17721786{
    17731787    RTGCPTR GCPtr;
     1788    int     rc;
     1789
     1790#ifndef VBOX_WITH_PGMPOOL_PAGING_ONLY
    17741791    /*
    17751792     * Reserve space for mapping the paging pages into guest context.
    17761793     */
    1777     int rc = MMR3HyperReserve(pVM, PAGE_SIZE * (2 + RT_ELEMENTS(pVM->pgm.s.apShwPaePDsR3) + 1 + 2 + 2), "Paging", &GCPtr);
     1794    rc = MMR3HyperReserve(pVM, PAGE_SIZE * (2 + RT_ELEMENTS(pVM->pgm.s.apShwPaePDsR3) + 1 + 2 + 2), "Paging", &GCPtr);
    17781795    AssertRCReturn(rc, rc);
    17791796    pVM->pgm.s.pShw32BitPdRC = GCPtr;
    17801797    MMR3HyperReserve(pVM, PAGE_SIZE, "fence", NULL);
     1798#endif
    17811799
    17821800    /*
     
    18111829VMMR3DECL(int) PGMR3InitFinalize(PVM pVM)
    18121830{
     1831    int rc;
     1832
     1833#ifndef VBOX_WITH_PGMPOOL_PAGING_ONLY
    18131834    /*
    18141835     * Map the paging pages into the guest context.
     
    18171838    AssertReleaseReturn(GCPtr, VERR_INTERNAL_ERROR);
    18181839
    1819     int rc = PGMMap(pVM, GCPtr, pVM->pgm.s.HCPhysShw32BitPD, PAGE_SIZE, 0);
     1840    rc = PGMMap(pVM, GCPtr, pVM->pgm.s.HCPhysShw32BitPD, PAGE_SIZE, 0);
    18201841    AssertRCReturn(rc, rc);
    18211842    pVM->pgm.s.pShw32BitPdRC = GCPtr;
     
    18411862    GCPtr += PAGE_SIZE;
    18421863    GCPtr += PAGE_SIZE; /* reserved page */
    1843 
     1864#endif
    18441865
    18451866    /*
     
    19051926    /** @todo move this into shadow and guest specific relocation functions. */
    19061927    AssertMsg(pVM->pgm.s.pShw32BitPdR3, ("Init order, no relocation before paging is initialized!\n"));
     1928#ifndef VBOX_WITH_PGMPOOL_PAGING_ONLY
    19071929    pVM->pgm.s.pShw32BitPdRC += offDelta;
     1930#endif
    19081931    pVM->pgm.s.pGst32BitPdRC += offDelta;
    19091932    AssertCompile(RT_ELEMENTS(pVM->pgm.s.apShwPaePDsRC) == RT_ELEMENTS(pVM->pgm.s.apGstPaePDsRC));
    19101933    for (unsigned i = 0; i < RT_ELEMENTS(pVM->pgm.s.apShwPaePDsRC); i++)
    19111934    {
     1935#ifndef VBOX_WITH_PGMPOOL_PAGING_ONLY
    19121936        pVM->pgm.s.apShwPaePDsRC[i] += offDelta;
     1937#endif
    19131938        pVM->pgm.s.apGstPaePDsRC[i] += offDelta;
    19141939    }
    19151940    pVM->pgm.s.pGstPaePdptRC += offDelta;
     1941#ifndef VBOX_WITH_PGMPOOL_PAGING_ONLY
    19161942    pVM->pgm.s.pShwPaePdptRC += offDelta;
     1943#endif
    19171944
    19181945    pgmR3ModeDataInit(pVM, true /* resolve GC/R0 symbols */);
     
    29652992    pVM->pgm.s.pfnR3GstModifyPage           = pModeData->pfnR3GstModifyPage;
    29662993    pVM->pgm.s.pfnR3GstGetPDE               = pModeData->pfnR3GstGetPDE;
     2994#ifndef VBOX_WITH_PGMPOOL_PAGING_ONLY
    29672995    pVM->pgm.s.pfnR3GstMonitorCR3           = pModeData->pfnR3GstMonitorCR3;
    29682996    pVM->pgm.s.pfnR3GstUnmonitorCR3         = pModeData->pfnR3GstUnmonitorCR3;
     2997#endif
    29692998    pVM->pgm.s.pfnR3GstMapCR3               = pModeData->pfnR3GstMapCR3;
    29702999    pVM->pgm.s.pfnR3GstUnmapCR3             = pModeData->pfnR3GstUnmapCR3;
     3000#ifndef VBOX_WITH_PGMPOOL_PAGING_ONLY
    29713001    pVM->pgm.s.pfnR3GstWriteHandlerCR3      = pModeData->pfnR3GstWriteHandlerCR3;
    29723002    pVM->pgm.s.pszR3GstWriteHandlerCR3      = pModeData->pszR3GstWriteHandlerCR3;
    29733003    pVM->pgm.s.pfnR3GstPAEWriteHandlerCR3   = pModeData->pfnR3GstPAEWriteHandlerCR3;
    29743004    pVM->pgm.s.pszR3GstPAEWriteHandlerCR3   = pModeData->pszR3GstPAEWriteHandlerCR3;
    2975 
     3005#endif
    29763006    pVM->pgm.s.pfnRCGstGetPage              = pModeData->pfnRCGstGetPage;
    29773007    pVM->pgm.s.pfnRCGstModifyPage           = pModeData->pfnRCGstModifyPage;
    29783008    pVM->pgm.s.pfnRCGstGetPDE               = pModeData->pfnRCGstGetPDE;
     3009#ifndef VBOX_WITH_PGMPOOL_PAGING_ONLY
    29793010    pVM->pgm.s.pfnRCGstMonitorCR3           = pModeData->pfnRCGstMonitorCR3;
    29803011    pVM->pgm.s.pfnRCGstUnmonitorCR3         = pModeData->pfnRCGstUnmonitorCR3;
     3012#endif
    29813013    pVM->pgm.s.pfnRCGstMapCR3               = pModeData->pfnRCGstMapCR3;
    29823014    pVM->pgm.s.pfnRCGstUnmapCR3             = pModeData->pfnRCGstUnmapCR3;
     3015#ifndef VBOX_WITH_PGMPOOL_PAGING_ONLY
    29833016    pVM->pgm.s.pfnRCGstWriteHandlerCR3      = pModeData->pfnRCGstWriteHandlerCR3;
    29843017    pVM->pgm.s.pfnRCGstPAEWriteHandlerCR3   = pModeData->pfnRCGstPAEWriteHandlerCR3;
    2985 
     3018#endif
    29863019    pVM->pgm.s.pfnR0GstGetPage              = pModeData->pfnR0GstGetPage;
    29873020    pVM->pgm.s.pfnR0GstModifyPage           = pModeData->pfnR0GstModifyPage;
    29883021    pVM->pgm.s.pfnR0GstGetPDE               = pModeData->pfnR0GstGetPDE;
     3022#ifndef VBOX_WITH_PGMPOOL_PAGING_ONLY
    29893023    pVM->pgm.s.pfnR0GstMonitorCR3           = pModeData->pfnR0GstMonitorCR3;
    29903024    pVM->pgm.s.pfnR0GstUnmonitorCR3         = pModeData->pfnR0GstUnmonitorCR3;
     3025#endif
    29913026    pVM->pgm.s.pfnR0GstMapCR3               = pModeData->pfnR0GstMapCR3;
    29923027    pVM->pgm.s.pfnR0GstUnmapCR3             = pModeData->pfnR0GstUnmapCR3;
     3028#ifndef VBOX_WITH_PGMPOOL_PAGING_ONLY
    29933029    pVM->pgm.s.pfnR0GstWriteHandlerCR3      = pModeData->pfnR0GstWriteHandlerCR3;
    29943030    pVM->pgm.s.pfnR0GstPAEWriteHandlerCR3   = pModeData->pfnR0GstPAEWriteHandlerCR3;
    2995 
     3031#endif
    29963032
    29973033    /* both */
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