VirtualBox

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


Ignore:
Timestamp:
Nov 4, 2021 7:02:55 PM (3 years ago)
Author:
vboxsync
Message:

VMM/VMMR3/PGMPhys: Allocate MMIO2 memory using SUPR3PageAlloc() instead of SUPR3PageAllocEx() when in simplified NEM memory mode because Apple's HV framework doesn't like to map memory, bugref:10122 and bugref:9044

File:
1 edited

Legend:

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

    r92177 r92218  
    30553055     * most likely to fail.
    30563056     */
    3057     int rc = MMR3AdjustFixedReservation(pVM, cPages, pszDesc);
     3057    int rc = VINF_SUCCESS;
     3058#ifdef VBOX_WITH_PGM_NEM_MODE
     3059    if (!pVM->pgm.s.fNemMode)
     3060#endif
     3061        rc = MMR3AdjustFixedReservation(pVM, cPages, pszDesc);
    30583062    if (RT_SUCCESS(rc))
    30593063    {
     
    30633067            void *pvPages;
    30643068#ifndef VBOX_WITH_LINEAR_HOST_PHYS_MEM
    3065             RTR0PTR pvPagesR0;
    3066             rc = SUPR3PageAllocEx(cPages, 0 /*fFlags*/, &pvPages, &pvPagesR0, paPages);
     3069            RTR0PTR pvPagesR0 = NIL_RTR0PTR;
     3070#endif
     3071
     3072#ifdef VBOX_WITH_PGM_NEM_MODE
     3073            if (!pVM->pgm.s.fNemMode)
     3074#endif
     3075            {
     3076#ifndef VBOX_WITH_LINEAR_HOST_PHYS_MEM
     3077                rc = SUPR3PageAllocEx(cPages, 0 /*fFlags*/, &pvPages, &pvPagesR0, paPages);
    30673078#else
    3068             rc = SUPR3PageAllocEx(cPages, 0 /*fFlags*/, &pvPages, NULL /*pR0Ptr*/, paPages);
     3079                rc = SUPR3PageAllocEx(cPages, 0 /*fFlags*/, &pvPages, NULL /*pR0Ptr*/, paPages);
     3080#endif
     3081            }
     3082#ifdef VBOX_WITH_PGM_NEM_MODE
     3083            else
     3084            {
     3085                rc = SUPR3PageAlloc(cPages, &pvPages);
     3086                if (RT_SUCCESS(rc))
     3087                    for (uint32_t i = 0; i < cPages; i++)
     3088                        paPages[i].Phys = UINT64_C(0x0000fffffffff000);
     3089            }
    30693090#endif
    30703091            if (RT_SUCCESS(rc))
     
    32043225             */
    32053226            uint32_t const cPages   = pCur->cbReal >> PAGE_SHIFT;
    3206             int rc2 = SUPR3PageFreeEx(pCur->pvR3, cPages);
    3207             AssertRC(rc2);
    3208             if (RT_FAILURE(rc2) && RT_SUCCESS(rc))
    3209                 rc = rc2;
    3210 
    3211             rc2 = MMR3AdjustFixedReservation(pVM, -(int32_t)cPages, pCur->RamRange.pszDesc);
    3212             AssertRC(rc2);
    3213             if (RT_FAILURE(rc2) && RT_SUCCESS(rc))
    3214                 rc = rc2;
     3227#ifdef VBOX_WITH_PGM_NEM_MODE
     3228            if (!pVM->pgm.s.fNemMode)
     3229#endif
     3230            {
     3231                int rc2 = SUPR3PageFreeEx(pCur->pvR3, cPages);
     3232                AssertRC(rc2);
     3233                if (RT_FAILURE(rc2) && RT_SUCCESS(rc))
     3234                    rc = rc2;
     3235
     3236                rc2 = MMR3AdjustFixedReservation(pVM, -(int32_t)cPages, pCur->RamRange.pszDesc);
     3237                AssertRC(rc2);
     3238                if (RT_FAILURE(rc2) && RT_SUCCESS(rc))
     3239                    rc = rc2;
     3240            }
     3241#ifdef VBOX_WITH_PGM_NEM_MODE
     3242            else
     3243            {
     3244                int rc2 = SUPR3PageFree(pCur->pvR3, cPages);
     3245                AssertRC(rc2);
     3246                if (RT_FAILURE(rc2) && RT_SUCCESS(rc))
     3247                    rc = rc2;
     3248            }
     3249#endif
    32153250
    32163251            if (pCur->pPhysHandlerR3)
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