VirtualBox

Changeset 107171 in vbox for trunk/src/VBox/VMM/VMMR3


Ignore:
Timestamp:
Nov 28, 2024 10:38:10 AM (7 weeks ago)
Author:
vboxsync
Message:

VMM/PGM: Introducing VBOX_WITH_ONLY_PGM_NEM_MODE to disable lots unused code on *.arm64 and darwin. jiraref:VBP-1466

Location:
trunk/src/VBox/VMM/VMMR3
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/VMM/VMMR3/GMM.cpp

    r106061 r107171  
    5050                                        GMMOCPOLICY enmPolicy, GMMPRIORITY enmPriority)
    5151{
     52#if defined(VBOX_WITH_R0_MODULES) && !defined(VBOX_WITH_MINIMAL_R0)
    5253    if (!SUPR3IsDriverless())
    5354    {
     
    6263        return VMMR3CallR0(pVM, VMMR0_DO_GMM_INITIAL_RESERVATION, 0, &Req.Hdr);
    6364    }
     65#else
     66    RT_NOREF(pVM, cBasePages, cShadowPages, cFixedPages, enmPolicy, enmPriority);
     67#endif
    6468    return VINF_SUCCESS;
    6569}
     
    7175GMMR3DECL(int)  GMMR3UpdateReservation(PVM pVM, uint64_t cBasePages, uint32_t cShadowPages, uint32_t cFixedPages)
    7276{
     77#if defined(VBOX_WITH_R0_MODULES) && !defined(VBOX_WITH_MINIMAL_R0)
    7378    if (!SUPR3IsDriverless())
    7479    {
     
    8186        return VMMR3CallR0(pVM, VMMR0_DO_GMM_UPDATE_RESERVATION, 0, &Req.Hdr);
    8287    }
     88#else
     89    RT_NOREF(pVM, cBasePages, cShadowPages, cFixedPages);
     90#endif
    8391    return VINF_SUCCESS;
    8492}
     
    269277}
    270278
     279#if defined(VBOX_WITH_R0_MODULES) && !defined(VBOX_WITH_MINIMAL_R0)
    271280
    272281/**
     
    432441
    433442
    434 #if defined(VBOX_STRICT) && HC_ARCH_BITS == 64
     443# if defined(VBOX_STRICT) && HC_ARCH_BITS == 64
    435444/**
    436445 * @see GMMR0FindDuplicatePage
     
    450459    return false;
    451460}
    452 #endif /* VBOX_STRICT && HC_ARCH_BITS == 64 */
    453 
     461# endif /* VBOX_STRICT && HC_ARCH_BITS == 64 */
     462
     463#endif /* defined(VBOX_WITH_R0_MODULES) && !defined(VBOX_WITH_MINIMAL_R0) */
     464
  • trunk/src/VBox/VMM/VMMR3/PGM-armv8.cpp

    r106670 r107171  
    7272
    7373/*********************************************************************************************************************************
    74 *   Structures and Typedefs                                                                                                      *
    75 *********************************************************************************************************************************/
    76 
    77 
    78 /*********************************************************************************************************************************
    7974*   Internal Functions                                                                                                           *
    8075*********************************************************************************************************************************/
     
    10196{
    10297    AssertFatal(!PDMCritSectIsInitialized(&pVM->pgm.s.CritSectX));
     98#ifndef VBOX_WITH_ONLY_PGM_NEM_MODE
    10399    pVM->pgm.s.fNemMode = true;
     100#endif
    104101}
    105102
     
    113110VMMR3_INT_DECL(bool)    PGMR3IsNemModeEnabled(PVM pVM)
    114111{
    115     return pVM->pgm.s.fNemMode;
     112    RT_NOREF(pVM);
     113    return PGM_IS_IN_NEM_MODE(pVM);
    116114}
    117115
     
    126124{
    127125    LogFlow(("PGMR3Init:\n"));
    128     PCFGMNODE pCfgPGM = CFGMR3GetChild(CFGMR3GetRoot(pVM), "/PGM");
    129     int rc;
    130126
    131127    /*
     
    136132    AssertCompileMemberAlignment(PGM, CritSectX, sizeof(uintptr_t));
    137133
    138     /*
    139      * If we're in driveless mode we have to use the simplified memory mode.
    140      */
    141134    bool const fDriverless = SUPR3IsDriverless();
    142     AssertReturn(fDriverless, VERR_NOT_SUPPORTED);
    143     if (!pVM->pgm.s.fNemMode)
    144         pVM->pgm.s.fNemMode = true;
    145135
    146136    /*
     
    148138     */
    149139    /*pVM->pgm.s.fRestoreRomPagesAtReset = false;*/
     140
     141    /* We always use the simplified memory mode on arm. */
     142#ifndef VBOX_WITH_ONLY_PGM_NEM_MODE
     143    pVM->pgm.s.fNemMode = true;
     144#endif
    150145
    151146    for (unsigned i = 0; i < RT_ELEMENTS(pVM->pgm.s.aHandyPages); i++)
     
    168163    for (size_t i = 0; i < RT_ELEMENTS(pVM->pgm.s.aPhysHandlerTypes); i++)
    169164    {
     165#if defined(VBOX_WITH_R0_MODULES) && !defined(VBOX_WITH_MINIMAL_R0)
    170166        if (fDriverless)
     167#endif
    171168            pVM->pgm.s.aPhysHandlerTypes[i].hType  = i | (RTRandU64() & ~(uint64_t)PGMPHYSHANDLERTYPE_IDX_MASK);
    172169        pVM->pgm.s.aPhysHandlerTypes[i].enmKind    = PGMPHYSHANDLERKIND_INVALID;
     
    183180#endif
    184181
    185     rc = CFGMR3QueryBoolDef(CFGMR3GetRoot(pVM), "RamPreAlloc", &pVM->pgm.s.fRamPreAlloc,
     182    /*
     183     * Read the configuration.
     184     */
     185    PCFGMNODE const pCfgPGM = CFGMR3GetChild(CFGMR3GetRoot(pVM), "/PGM");
     186
     187    int rc = CFGMR3QueryBoolDef(CFGMR3GetRoot(pVM), "RamPreAlloc", &pVM->pgm.s.fRamPreAlloc,
    186188#ifdef VBOX_WITH_PREALLOC_RAM_BY_DEFAULT
    187189                            true
     
    252254     */
    253255    RT_ZERO(pVM->pgm.s.abZeroPg); /* paranoia */
     256#ifndef VBOX_WITH_ONLY_PGM_NEM_MODE
    254257    if (fDriverless)
    255258        pVM->pgm.s.HCPhysZeroPg = _4G - GUEST_PAGE_SIZE * 2 /* fake to avoid PGM_PAGE_INIT_ZERO assertion */;
    256259    AssertRelease(pVM->pgm.s.HCPhysZeroPg != NIL_RTHCPHYS);
    257260    AssertRelease(pVM->pgm.s.HCPhysZeroPg != 0);
     261#endif
    258262
    259263    /*
     
    262266     */
    263267    ASMMemFill32(pVM->pgm.s.abMmioPg, sizeof(pVM->pgm.s.abMmioPg), 0xfeedface);
     268#ifndef VBOX_WITH_ONLY_PGM_NEM_MODE
    264269    if (fDriverless)
    265270        pVM->pgm.s.HCPhysMmioPg = _4G - GUEST_PAGE_SIZE * 3 /* fake to avoid PGM_PAGE_INIT_ZERO assertion */;
     
    267272    AssertRelease(pVM->pgm.s.HCPhysMmioPg != 0);
    268273    pVM->pgm.s.HCPhysInvMmioPg = pVM->pgm.s.HCPhysMmioPg;
     274#endif
    269275
    270276    /*
     
    282288    AssertLogRelMsgStmt(cAccessHandlers >= 32, ("cAccessHandlers=%#x, min 32\n", cAccessHandlers), cAccessHandlers = 32);
    283289    AssertLogRelMsgStmt(cAccessHandlers <= _64K, ("cAccessHandlers=%#x, max 65536\n", cAccessHandlers), cAccessHandlers = _64K);
     290#if defined(VBOX_WITH_R0_MODULES) && !defined(VBOX_WITH_MINIMAL_R0)
    284291    if (!fDriverless)
    285292    {
     
    291298    }
    292299    else
     300#endif
    293301    {
    294302        uint32_t       cbTreeAndBitmap = 0;
     
    331339
    332340/**
    333  * Ring-3 init finalizing.
     341 * Ring-3 init finalizing (not required here).
    334342 *
    335343 * @returns VBox status code.
     
    338346VMMR3DECL(int) PGMR3InitFinalize(PVM pVM)
    339347{
    340     /*
    341      * Allocate memory if we're supposed to do that.
    342      */
     348    RT_NOREF(pVM);
    343349    int rc = VINF_SUCCESS;
     350#ifndef VBOX_WITH_ONLY_PGM_NEM_MODE
    344351    if (pVM->pgm.s.fRamPreAlloc)
    345352        rc = pgmR3PhysRamPreAllocate(pVM);
     353#endif
    346354
    347355    //pgmLogState(pVM);
    348     LogRel(("PGM: PGMR3InitFinalize: 4 MB PSE mask %RGp -> %Rrc\n", pVM->pgm.s.GCPhys4MBPSEMask, rc));
     356    LogRel(("PGM: PGMR3InitFinalize done: %Rrc\n", rc));
    349357    return rc;
    350358}
     
    511519VMMDECL(bool) PGMHasDirtyPages(PVM pVM)
    512520{
     521#ifndef VBOX_WITH_ONLY_PGM_NEM_MODE
    513522    return pVM->pgm.s.CTX_SUFF(pPool)->cDirtyPages != 0;
     523#else
     524    RT_NOREF(pVM);
     525    return false;
     526#endif
    514527}
    515528
     
    730743
    731744    CPUMMODE enmCpuMode = CPUMGetGuestMode(pVCpu);
    732     return   enmCpuMode == CPUMMODE_ARMV8_AARCH64
    733            ? PGMMODE_VMSA_V8_64
    734            : PGMMODE_VMSA_V8_32;
     745    return enmCpuMode == CPUMMODE_ARMV8_AARCH64
     746         ? PGMMODE_VMSA_V8_64
     747         : PGMMODE_VMSA_V8_32;
    735748}
    736749
     
    10001013    return pgmGstPtWalk(pVCpu, GCPtr, pWalk, pGstWalk); /** @todo Always do full walk for now. */
    10011014}
     1015
  • trunk/src/VBox/VMM/VMMR3/PGM.cpp

    r106061 r107171  
    737737{
    738738    AssertFatal(!PDMCritSectIsInitialized(&pVM->pgm.s.CritSectX));
     739# ifndef VBOX_WITH_ONLY_PGM_NEM_MODE
    739740    if (!pVM->pgm.s.fNemMode)
    740741    {
     
    742743        pVM->pgm.s.fNemMode = true;
    743744    }
     745# endif
    744746}
    745747
     
    753755VMMR3_INT_DECL(bool)    PGMR3IsNemModeEnabled(PVM pVM)
    754756{
    755     return pVM->pgm.s.fNemMode;
     757    RT_NOREF(pVM);
     758    return PGM_IS_IN_NEM_MODE(pVM);
    756759}
    757760
     
    784787    {
    785788#ifdef VBOX_WITH_PGM_NEM_MODE
    786         if (!pVM->pgm.s.fNemMode)
     789# ifndef VBOX_WITH_ONLY_PGM_NEM_MODE
     790        if (!PGM_IS_IN_NEM_MODE(pVM))
    787791        {
    788792            LogRel(("PGM: Enabling NEM mode (driverless)\n"));
    789793            pVM->pgm.s.fNemMode = true;
    790794        }
     795# endif
    791796#else
    792797        return VMR3SetError(pVM->pUVM, VERR_SUP_DRIVERLESS, RT_SRC_POS,
     
    954959     */
    955960    RT_ZERO(pVM->pgm.s.abZeroPg); /* paranoia */
     961#ifndef VBOX_WITH_ONLY_PGM_NEM_MODE
    956962    if (fDriverless)
    957963        pVM->pgm.s.HCPhysZeroPg = _4G - GUEST_PAGE_SIZE * 2 /* fake to avoid PGM_PAGE_INIT_ZERO assertion */;
     
    959965    AssertRelease(pVM->pgm.s.HCPhysZeroPg != 0);
    960966    Log(("HCPhysZeroPg=%RHp abZeroPg=%p\n", pVM->pgm.s.HCPhysZeroPg, pVM->pgm.s.abZeroPg));
     967#endif
    961968
    962969    /*
     
    965972     */
    966973    ASMMemFill32(pVM->pgm.s.abMmioPg, sizeof(pVM->pgm.s.abMmioPg), 0xfeedface);
     974#ifndef VBOX_WITH_ONLY_PGM_NEM_MODE
    967975    if (fDriverless)
    968976        pVM->pgm.s.HCPhysMmioPg = _4G - GUEST_PAGE_SIZE * 3 /* fake to avoid PGM_PAGE_INIT_ZERO assertion */;
     
    971979    pVM->pgm.s.HCPhysInvMmioPg = pVM->pgm.s.HCPhysMmioPg;
    972980    Log(("HCPhysInvMmioPg=%RHp abMmioPg=%p\n", pVM->pgm.s.HCPhysMmioPg, pVM->pgm.s.abMmioPg));
     981#endif VBOX_WITH_ONLY_PGM_NEM_MODE
     982
    973983
    974984    /*
     
    986996    AssertLogRelMsgStmt(cAccessHandlers >= 32, ("cAccessHandlers=%#x, min 32\n", cAccessHandlers), cAccessHandlers = 32);
    987997    AssertLogRelMsgStmt(cAccessHandlers <= _64K, ("cAccessHandlers=%#x, max 65536\n", cAccessHandlers), cAccessHandlers = _64K);
     998#if defined(VBOX_WITH_R0_MODULES) && !defined(VBOX_WITH_MINIMAL_R0)
    988999    if (!fDriverless)
    9891000    {
     
    9951006    }
    9961007    else
     1008#endif
    9971009    {
    9981010        uint32_t       cbTreeAndBitmap = 0;
     
    17721784     */
    17731785    int rc = VINF_SUCCESS;
     1786#ifndef VBOX_WITH_ONLY_PGM_NEM_MODE
    17741787    if (pVM->pgm.s.fRamPreAlloc)
    17751788        rc = pgmR3PhysRamPreAllocate(pVM);
     1789#endif
    17761790
    17771791    //pgmLogState(pVM);
     
    23382352    }
    23392353
     2354#ifndef VBOX_WITH_ONLY_PGM_NEM_MODE
    23402355    Assert(pVCpu->pgm.s.pShwPageCR3R3 == NULL);
     2356#endif
    23412357    return rc;
    23422358}
     
    23582374    AssertRCSuccessReturn(rc, VERR_IPE_UNEXPECTED_INFO_STATUS);
    23592375
     2376#ifndef VBOX_WITH_ONLY_PGM_NEM_MODE
    23602377    Assert(pVCpu->pgm.s.pShwPageCR3R3 != NULL || pVCpu->pgm.s.enmShadowMode == PGMMODE_NONE);
     2378#endif
    23612379    AssertMsg(   pVCpu->pgm.s.enmShadowMode >= PGMMODE_NESTED_32BIT
    23622380              || CPUMGetHyperCR3(pVCpu) == PGMGetHyperCR3(pVCpu),
  • trunk/src/VBox/VMM/VMMR3/PGMDbg.cpp

    r106382 r107171  
    12891289}
    12901290
     1291#ifndef VBOX_WITH_ONLY_PGM_NEM_MODE
    12911292
    12921293/**
     
    22142215}
    22152216
     2217#endif /* !VBOX_WITH_ONLY_PGM_NEM_MODE */
     2218
    22162219
    22172220/**
     
    22372240    AssertReturn(fFlags & DBGFPGDMP_FLAGS_SHADOW, VERR_INVALID_PARAMETER);
    22382241
     2242#ifndef VBOX_WITH_ONLY_PGM_NEM_MODE
    22392243    PGMR3DUMPHIERARCHYSTATE State;
    22402244    pgmR3DumpHierarchyInitState(&State, pVM, fFlags, u64FirstAddr, u64LastAddr, pHlp);
     
    22432247    PGM_UNLOCK(pVM);
    22442248    return rc;
     2249#else
     2250    RT_NOREF(pVM, cr3, fFlags, u64FirstAddr, u64LastAddr, cMaxDepth, pHlp);
     2251    return VINF_SUCCESS;
     2252#endif
    22452253}
    22462254
  • trunk/src/VBox/VMM/VMMR3/PGMPhys.cpp

    r106590 r107171  
    15951595                    PGMPAGETYPE enmNewType)
    15961596{
     1597    RT_NOREF(enmNewType, pcPendingPages);
     1598
    15971599    /*
    15981600     * Assert sanity.
     
    16251627        return VMSetError(pVM, VERR_PGM_PHYS_INVALID_PAGE_ID, RT_SRC_POS, "GCPhys=%RGp idPage=%#x", GCPhys, pPage);
    16261628    }
    1627 #ifdef VBOX_WITH_NATIVE_NEM
     1629#if defined(VBOX_WITH_NATIVE_NEM) && !defined(VBOX_WITH_ONLY_PGM_NEM_MODE)
    16281630    const RTHCPHYS HCPhysPrev = PGM_PAGE_GET_HCPHYS(pPage);
    16291631#endif
     
    16581660    IEMTlbInvalidateAllPhysicalAllCpus(pVM, NIL_VMCPUID, IEMTLBPHYSFLUSHREASON_FREED); /// @todo move to the perform step.
    16591661
    1660 #ifdef VBOX_WITH_PGM_NEM_MODE
     1662#ifndef VBOX_WITH_ONLY_PGM_NEM_MODE
     1663# ifdef VBOX_WITH_PGM_NEM_MODE
    16611664    /*
    16621665     * Skip the rest if we're doing a bulk free in NEM memory mode.
     
    16651668        return VINF_SUCCESS;
    16661669    AssertLogRelReturn(!pVM->pgm.s.fNemMode, VERR_PGM_NOT_SUPPORTED_FOR_NEM_MODE);
    1667 #endif
    1668 
    1669 #ifdef VBOX_WITH_NATIVE_NEM
     1670# endif
     1671
     1672# ifdef VBOX_WITH_NATIVE_NEM
    16701673    /* Notify NEM. */
    16711674    /** @todo Remove this one? */
     
    16771680        PGM_PAGE_SET_NEM_STATE(pPage, u2State);
    16781681    }
    1679 #else
    1680     RT_NOREF(enmNewType);
    1681 #endif
     1682# endif
    16821683
    16831684    /*
     
    17221723    }
    17231724    return rc;
    1724 }
    1725 
    1726 
    1727 /**
    1728  * Frees a range of pages, replacing them with ZERO pages of the specified type.
     1725
     1726#else  /* VBOX_WITH_ONLY_PGM_NEM_MODE */
     1727    Assert(!pReq); RT_NOREF(pReq);
     1728    return VINF_SUCCESS;
     1729#endif /* VBOX_WITH_ONLY_PGM_NEM_MODE */
     1730}
     1731
     1732
     1733/**
     1734 * Frees a range of pages, replacing them with MMIO ZERO pages.
    17291735 *
    17301736 * @returns VBox status code.
     
    17391745{
    17401746    PGM_LOCK_ASSERT_OWNER(pVM);
     1747    /** @todo pvMmio2 is always NULL. */
    17411748
    17421749#ifdef VBOX_WITH_PGM_NEM_MODE
     
    17451752     * we just unmap it and let NEM do any unlocking of it.
    17461753     */
     1754# ifndef VBOX_WITH_ONLY_PGM_NEM_MODE
    17471755    if (pVM->pgm.s.fNemMode)
     1756# endif
    17481757    {
    17491758        Assert(VM_IS_NEM_ENABLED(pVM) || VM_IS_EXEC_ENGINE_IEM(pVM));
     
    17771786    RT_NOREF(pvMmio2);
    17781787#endif /* !VBOX_WITH_PGM_NEM_MODE */
     1788#ifndef VBOX_WITH_ONLY_PGM_NEM_MODE
    17791789
    17801790    /*
     
    17871797    AssertLogRelRCReturn(rc, rc);
    17881798
    1789 #ifdef VBOX_WITH_NATIVE_NEM
     1799# ifdef VBOX_WITH_NATIVE_NEM
    17901800    /* Tell NEM up-front. */
    17911801    uint8_t u2State = UINT8_MAX;
     
    17971807        AssertLogRelRCReturnStmt(rc, GMMR3FreePagesCleanup(pReq), rc);
    17981808    }
    1799 #endif
     1809# endif
    18001810
    18011811    /* Iterate the pages. */
     
    18081818
    18091819        PGM_PAGE_SET_TYPE(pVM, pPageDst, PGMPAGETYPE_MMIO);
    1810 #ifdef VBOX_WITH_NATIVE_NEM
     1820# ifdef VBOX_WITH_NATIVE_NEM
    18111821        if (u2State != UINT8_MAX)
    18121822            PGM_PAGE_SET_NEM_STATE(pPageDst, u2State);
    1813 #endif
     1823# endif
    18141824
    18151825        GCPhys += GUEST_PAGE_SIZE;
     
    18261836
    18271837    return rc;
     1838#endif /* !VBOX_WITH_ONLY_PGM_NEM_MODE */
    18281839}
    18291840
     
    18371848    PGMPHYSALLOCATERAMRANGEREQ AllocRangeReq;
    18381849    AllocRangeReq.idNewRange   = UINT32_MAX / 4;
    1839     if (SUPR3IsDriverless())
    1840         rc = pgmPhysRamRangeAllocCommon(pVM, cGuestPages, fFlags, &AllocRangeReq.idNewRange);
    1841     else
     1850#if defined(VBOX_WITH_R0_MODULES) && !defined(VBOX_WITH_MINIMAL_R0)
     1851    if (!SUPR3IsDriverless())
    18421852    {
    18431853        AllocRangeReq.Hdr.u32Magic = SUPVMMR0REQHDR_MAGIC;
     
    18481858        rc = VMMR3CallR0Emt(pVM, pVCpu, VMMR0_DO_PGM_PHYS_ALLOCATE_RAM_RANGE, 0 /*u64Arg*/, &AllocRangeReq.Hdr);
    18491859    }
     1860    else
     1861#endif
     1862        rc = pgmPhysRamRangeAllocCommon(pVM, cGuestPages, fFlags, &AllocRangeReq.idNewRange);
    18501863    if (RT_SUCCESS(rc))
    18511864    {
     
    18571870    }
    18581871
     1872    RT_NOREF(pVCpu);
    18591873    *ppRamRange = NULL;
    18601874    return rc;
     
    18901904    uint32_t const cPages = pNew->cb >> GUEST_PAGE_SHIFT;
    18911905#ifdef VBOX_WITH_PGM_NEM_MODE
    1892     if (!pVM->pgm.s.fNemMode)
    1893 #endif
     1906    if (PGM_IS_IN_NEM_MODE(pVM))
    18941907    {
    18951908        RTGCPHYS iPage = cPages;
     
    19011914        pVM->pgm.s.cAllPages  += cPages;
    19021915    }
    1903 #ifdef VBOX_WITH_PGM_NEM_MODE
    19041916    else
    1905     {
     1917#endif
     1918    {
     1919#ifndef VBOX_WITH_ONLY_PGM_NEM_MODE
    19061920        int rc = SUPR3PageAlloc(RT_ALIGN_Z(pNew->cb, HOST_PAGE_SIZE) >> HOST_PAGE_SHIFT,
    19071921                                pVM->pgm.s.fUseLargePages ? SUP_PAGE_ALLOC_F_LARGE_PAGES : 0, (void **)&pNew->pbR3);
     
    19171931        pVM->pgm.s.cPrivatePages += cPages;
    19181932        pVM->pgm.s.cAllPages     += cPages;
    1919     }
    1920 #endif
     1933#endif
     1934    }
    19211935
    19221936    /*
     
    20922106
    20932107
     2108#ifndef VBOX_WITH_ONLY_PGM_NEM_MODE
    20942109/**
    20952110 * Worker called by PGMR3InitFinalize if we're configured to pre-allocate RAM.
     
    21062121    Assert(pVM->pgm.s.fRamPreAlloc);
    21072122    Log(("pgmR3PhysRamPreAllocate: enter\n"));
    2108 #ifdef VBOX_WITH_PGM_NEM_MODE
    2109     AssertLogRelReturn(!pVM->pgm.s.fNemMode, VERR_PGM_NOT_SUPPORTED_FOR_NEM_MODE);
    2110 #endif
     2123# ifdef VBOX_WITH_PGM_NEM_MODE
     2124    if (VM_IS_NEM_ENABLED(pVM))
     2125    {
     2126        LogRel(("PGM: Pre-alloc ignored in NEM mode.\n"));
     2127        return VINF_SUCCESS;
     2128    }
     2129# endif
    21112130
    21122131    /*
     
    21682187    return VINF_SUCCESS;
    21692188}
     2189#endif /* !VBOX_WITH_ONLY_PGM_NEM_MODE */
    21702190
    21712191
     
    22482268    PGM_LOCK_ASSERT_OWNER(pVM);
    22492269
     2270#if defined(VBOX_WITH_R0_MODULES) && !defined(VBOX_WITH_MINIMAL_R0)
    22502271    /* Reset the memory balloon. */
    2251     int rc = GMMR3BalloonedPages(pVM, GMMBALLOONACTION_RESET, 0);
    2252     AssertRC(rc);
     2272    int rc1 = GMMR3BalloonedPages(pVM, GMMBALLOONACTION_RESET, 0);
     2273    AssertRC(rc1);
     2274#endif
    22532275
    22542276#ifdef VBOX_WITH_PAGE_SHARING
    22552277    /* Clear all registered shared modules. */
    22562278    pgmR3PhysAssertSharedPageChecksums(pVM);
    2257     rc = GMMR3ResetSharedModules(pVM);
    2258     AssertRC(rc);
     2279    int rc2 = GMMR3ResetSharedModules(pVM);
     2280    AssertRC(rc2);
    22592281#endif
    22602282    /* Reset counters. */
     
    23012323        AssertMsg(((RTGCPHYS)iPage << GUEST_PAGE_SHIFT) == pRam->cb, ("%RGp %RGp\n", (RTGCPHYS)iPage << GUEST_PAGE_SHIFT, pRam->cb));
    23022324
     2325#ifndef VBOX_WITH_ONLY_PGM_NEM_MODE
    23032326        if (   !pVM->pgm.s.fRamPreAlloc
    2304 #ifdef VBOX_WITH_PGM_NEM_MODE
     2327# ifdef VBOX_WITH_PGM_NEM_MODE
    23052328            && !pVM->pgm.s.fNemMode
    2306 #endif
     2329# endif
    23072330            && pVM->pgm.s.fZeroRamPagesOnReset)
    23082331        {
     
    23542377        }
    23552378        else
     2379#endif /* !VBOX_WITH_ONLY_PGM_NEM_MODE */
     2380
    23562381        {
    23572382            /* Zero the memory. */
     
    24382463int pgmR3PhysRamTerm(PVM pVM)
    24392464{
     2465    int rc;
    24402466    PGM_LOCK_ASSERT_OWNER(pVM);
    24412467
     2468#if defined(VBOX_WITH_R0_MODULES) && !defined(VBOX_WITH_MINIMAL_R0)
    24422469    /* Reset the memory balloon. */
    2443     int rc = GMMR3BalloonedPages(pVM, GMMBALLOONACTION_RESET, 0);
     2470    rc = GMMR3BalloonedPages(pVM, GMMBALLOONACTION_RESET, 0);
    24442471    AssertRC(rc);
     2472#endif
    24452473
    24462474#ifdef VBOX_WITH_PAGE_SHARING
     2475
    24472476    /*
    24482477     * Clear all registered shared modules.
     
    32803309         * and maybe a ring-0 mapping address for it all.
    32813310         */
    3282         if (SUPR3IsDriverless())
    3283             rc = pgmPhysMmio2RegisterWorker(pVM, cGuestPages, idMmio2, cChunks, pDevIns, iSubDev, iRegion, fFlags);
    3284         else
     3311#if defined(VBOX_WITH_R0_MODULES) && !defined(VBOX_WITH_MINIMAL_R0)
     3312        if (!SUPR3IsDriverless())
    32853313        {
    32863314            PGMPHYSMMIO2REGISTERREQ Mmio2RegReq;
     
    32973325            rc = VMMR3CallR0Emt(pVM, pVCpu, VMMR0_DO_PGM_PHYS_MMIO2_REGISTER, 0 /*u64Arg*/, &Mmio2RegReq.Hdr);
    32983326        }
     3327        else
     3328#endif
     3329            rc = pgmPhysMmio2RegisterWorker(pVM, cGuestPages, idMmio2, cChunks, pDevIns, iSubDev, iRegion, fFlags);
    32993330        if (RT_SUCCESS(rc))
    33003331        {
     
    34513482            const char * const pszDesc = pVM->pgm.s.apMmio2RamRanges[idx] ? pVM->pgm.s.apMmio2RamRanges[idx]->pszDesc : NULL;
    34523483            int rc2;
    3453             if (SUPR3IsDriverless())
    3454             {
    3455                 Assert(PGM_IS_IN_NEM_MODE(pVM));
    3456                 rc2 = pgmPhysMmio2DeregisterWorker(pVM, idx, cChunks, pDevIns);
    3457                 AssertLogRelMsgStmt(RT_SUCCESS(rc2),
    3458                                     ("pgmPhysMmio2DeregisterWorker: rc=%Rrc idx=%#x cChunks=%#x %s\n",
    3459                                      rc2, idx, cChunks, pszDesc),
    3460                                     rc = RT_SUCCESS(rc) ? rc2 : rc);
    3461             }
    3462             else
     3484#if defined(VBOX_WITH_R0_MODULES) && !defined(VBOX_WITH_MINIMAL_R0)
     3485            if (!SUPR3IsDriverless())
    34633486            {
    34643487                PGMPHYSMMIO2DEREGISTERREQ Mmio2DeregReq;
     
    34753498                pgmPhysInvalidRamRangeTlbs(pVM); /* Ensure no stale pointers in the ring-3 RAM range TLB. */
    34763499            }
     3500            else
     3501#endif
     3502            {
     3503                Assert(PGM_IS_IN_NEM_MODE(pVM));
     3504                rc2 = pgmPhysMmio2DeregisterWorker(pVM, idx, cChunks, pDevIns);
     3505                AssertLogRelMsgStmt(RT_SUCCESS(rc2),
     3506                                    ("pgmPhysMmio2DeregisterWorker: rc=%Rrc idx=%#x cChunks=%#x %s\n",
     3507                                     rc2, idx, cChunks, pszDesc),
     3508                                    rc = RT_SUCCESS(rc) ? rc2 : rc);
     3509            }
    34773510            if (RT_FAILURE(rc2))
    34783511            {
     
    36143647            Assert(PGM_PAGE_IS_MMIO(pPageDst));
    36153648
    3616             RTHCPHYS const HCPhys = PGM_PAGE_GET_HCPHYS(pPageSrc);
     3649            RTHCPHYS const HCPhys = PGM_PAGE_GET_HCPHYS(pPageSrc); RT_NOREF_PV(HCPhys);
    36173650            uint32_t const idPage = PGM_PAGE_GET_PAGEID(pPageSrc);
    36183651            PGM_PAGE_SET_PAGEID(pVM, pPageDst, idPage);
     
    46994732#endif
    47004733    {
     4734#ifndef VBOX_WITH_ONLY_PGM_NEM_MODE
    47014735        rc = GMMR3AllocatePagesPrepare(pVM, &pReq, cGuestPages, GMMACCOUNT_BASE);
    47024736        AssertRCReturn(rc, rc);
     
    47164750            return rc;
    47174751        }
     4752#endif
    47184753    }
    47194754
     
    47324767         * Note! We don't clean up the ROM range here on failure, VM destruction does that.
    47334768         */
    4734         if (SUPR3IsDriverless())
    4735             rc = pgmPhysRomRangeAllocCommon(pVM, cGuestPages, idRomRange, fFlags);
    4736         else
     4769#if defined(VBOX_WITH_R0_MODULES) && !defined(VBOX_WITH_MINIMAL_R0)
     4770        if (!SUPR3IsDriverless())
    47374771        {
    47384772            PGMPHYSROMALLOCATERANGEREQ RomRangeReq;
     
    47454779            rc = VMMR3CallR0Emt(pVM, pVCpu, VMMR0_DO_PGM_PHYS_ROM_ALLOCATE_RANGE, 0 /*u64Arg*/, &RomRangeReq.Hdr);
    47464780        }
     4781        else
     4782#endif
     4783            rc = pgmPhysRomRangeAllocCommon(pVM, cGuestPages, idRomRange, fFlags);
    47474784    }
    47484785    if (RT_SUCCESS(rc))
     
    47794816#endif
    47804817            {
     4818#ifndef VBOX_WITH_ONLY_PGM_NEM_MODE
    47814819                Assert(!pRamRange->pbR3); Assert(!pvRam);
    47824820                for (uint32_t iPage = 0; iPage < cGuestPages; iPage++, pRamPage++, pRomPage++)
     
    47904828                    pRomPage->Virgin = *pRamPage;
    47914829                }
     4830#endif
    47924831            }
    47934832
     
    48224861#endif
    48234862            {
     4863#ifndef VBOX_WITH_ONLY_PGM_NEM_MODE
    48244864                for (uint32_t iPage = 0; iPage < cGuestPages; iPage++, pRamPage++, pRomPage++)
    48254865                {
     
    48364876                pVM->pgm.s.cZeroPages    -= cGuestPages;
    48374877                pVM->pgm.s.cPrivatePages += cGuestPages;
     4878#endif
    48384879            }
    48394880            pRamRange = pOverlappingRange;
     
    50015042#endif
    50025043            {
     5044#ifndef VBOX_WITH_ONLY_PGM_NEM_MODE
    50035045                for (uint32_t iPage = 0; iPage < cGuestPages; iPage++, pRamPage++)
    50045046                    PGM_PAGE_INIT_ZERO(pRamPage, pVM, PGMPAGETYPE_RAM);
    50055047                pVM->pgm.s.cZeroPages    += cGuestPages;
    50065048                pVM->pgm.s.cPrivatePages -= cGuestPages;
     5049#endif
    50075050            }
    50085051        }
     
    50235066#endif
    50245067    {
     5068#ifndef VBOX_WITH_ONLY_PGM_NEM_MODE
    50255069        GMMR3FreeAllocatedPages(pVM, pReq);
    50265070        GMMR3AllocatePagesCleanup(pReq);
     5071#endif
    50275072    }
    50285073
     
    51165161                RT_BZERO(pRom->pbR3Alternate, pRom->cb);
    51175162            }
     5163# ifndef VBOX_WITH_ONLY_PGM_NEM_MODE
    51185164            else
    5119 #endif
     5165# endif
     5166#endif
     5167#ifndef VBOX_WITH_ONLY_PGM_NEM_MODE
    51205168            if (!pVM->pgm.s.fRamPreAlloc)
    51215169            {
     
    51615209                AssertRCReturn(rc, rc);
    51625210            }
     5211#endif
    51635212        }
    51645213
     
    53985447    unsigned            cPages          = paUser[1];
    53995448    RTGCPHYS           *paPhysPage      = (RTGCPHYS *)paUser[2];
    5400     uint32_t            cPendingPages   = 0;
    5401     PGMMFREEPAGESREQ    pReq;
    5402     int                 rc;
     5449    int                 rc              = VINF_SUCCESS;
    54035450
    54045451    Log(("pgmR3PhysChangeMemBalloonRendezvous: %s %x pages\n", (fInflate) ? "inflate" : "deflate", cPages));
     
    54115458
    54125459        /* Replace pages with ZERO pages. */
     5460        uint32_t         cPendingPages   = 0;
     5461        PGMMFREEPAGESREQ pReq            = NULL;
    54135462        rc = GMMR3FreePagesPrepare(pVM, &pReq, PGMPHYS_FREE_PAGE_BATCH_SIZE, GMMACCOUNT_BASE);
    54145463        if (RT_FAILURE(rc))
     
    54775526    }
    54785527
     5528#if defined(VBOX_WITH_R0_MODULES) && !defined(VBOX_WITH_MINIMAL_R0)
    54795529    /* Notify GMM about the balloon change. */
    54805530    rc = GMMR3BalloonedPages(pVM, (fInflate) ? GMMBALLOONACTION_INFLATE : GMMBALLOONACTION_DEFLATE, cPages);
     
    54895539            pVM->pgm.s.cBalloonedPages += cPages;
    54905540    }
     5541#endif
    54915542
    54925543    PGM_UNLOCK(pVM);
     
    57005751    uint64_t cBalloonPages = 0;
    57015752    uint64_t cSharedPages  = 0;
     5753#if defined(VBOX_WITH_R0_MODULES) && !defined(VBOX_WITH_MINIMAL_R0)
    57025754    if (!SUPR3IsDriverless())
    57035755    {
     
    57055757        AssertRCReturn(rc, rc);
    57065758    }
     5759#endif
    57075760
    57085761    if (pcbAllocMem)
  • trunk/src/VBox/VMM/VMMR3/PGMSavedState.cpp

    r106061 r107171  
    32223222        rc = pgmR3LoadMemoryOld(pVM, pSSM, uVersion);
    32233223
     3224#if defined(VBOX_WITH_R0_MODULES) && !defined(VBOX_WITH_MINIMAL_R0)
    32243225    /* Refresh balloon accounting. */
    32253226    if (pVM->pgm.s.cBalloonedPages)
     
    32293230        AssertRCReturn(rc, rc);
    32303231    }
     3232#endif
    32313233    return rc;
    32323234}
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