VirtualBox

Changeset 91820 in vbox


Ignore:
Timestamp:
Oct 18, 2021 9:59:23 AM (3 years ago)
Author:
vboxsync
Message:

VMM/PGMPool: Make we grow while on the kernel stack. bugref:10124

Location:
trunk/src/VBox/VMM/VMMR0
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/VMM/VMMR0/PGMR0Pool.cpp

    r91243 r91820  
    140140
    141141/**
     142 * Move this back to PGMR0PoolGrow when VMM_R0_SWITCH_STACK is gonne.
     143 */
     144#ifndef VMM_R0_SWITCH_STACK
     145static int pgmR0PoolGrowOnKrnlStk(PGVM pGVM, PGVMCPU pGVCpu, PPGMPOOL pPool)
     146#else
     147DECLASM(int) pgmR0PoolGrowOnKrnlStk(PGVM pGVM, PGVMCPU pGVCpu);
     148DECLASM(int) StkBack_pgmR0PoolGrowOnKrnlStk(PGVM pGVM, PGVMCPU pGVCpu, PPGMPOOL pPool)
     149#endif
     150{
     151    /*
     152     * Enter the grow critical section and call worker.
     153     */
     154    STAM_REL_PROFILE_START(&pPool->StatGrow, a);
     155
     156    VMMR0EMTBLOCKCTX Ctx;
     157    int rc = VMMR0EmtPrepareToBlock(pGVCpu, VINF_SUCCESS, __FUNCTION__, &pGVM->pgmr0.s.PoolGrowCritSect, &Ctx);
     158    AssertRCReturn(rc, rc);
     159
     160    rc = RTCritSectEnter(&pGVM->pgmr0.s.PoolGrowCritSect);
     161    AssertRCReturn(rc, rc);
     162
     163    rc = pgmR0PoolGrowInner(pGVM, pPool);
     164
     165    STAM_REL_PROFILE_STOP(&pPool->StatGrow, a);
     166    RTCritSectLeave(&pGVM->pgmr0.s.PoolGrowCritSect);
     167
     168    VMMR0EmtResumeAfterBlocking(pGVCpu, &Ctx);
     169    return rc;
     170}
     171
     172
     173/**
    142174 * Grows the shadow page pool.
    143175 *
     
    162194    PGVMCPU const pGVCpu = &pGVM->aCpus[idCpu];
    163195
    164     /*
    165      * Enter the grow critical section and call worker.
    166      */
    167     STAM_REL_PROFILE_START(&pPool->StatGrow, a);
    168 
    169     VMMR0EMTBLOCKCTX Ctx;
    170     int rc = VMMR0EmtPrepareToBlock(pGVCpu, VINF_SUCCESS, __FUNCTION__, &pGVM->pgmr0.s.PoolGrowCritSect, &Ctx);
    171     AssertRCReturn(rc, rc);
    172 
    173     rc = RTCritSectEnter(&pGVM->pgmr0.s.PoolGrowCritSect);
    174     AssertRCReturn(rc, rc);
    175 
    176     rc = pgmR0PoolGrowInner(pGVM, pPool);
    177 
    178     STAM_REL_PROFILE_STOP(&pPool->StatGrow, a);
    179     RTCritSectLeave(&pGVM->pgmr0.s.PoolGrowCritSect);
    180 
    181     VMMR0EmtResumeAfterBlocking(pGVCpu, &Ctx);
    182 
    183     return rc;
     196    return pgmR0PoolGrowOnKrnlStk(pGVM, pGVCpu, pPool);
    184197}
    185198
  • trunk/src/VBox/VMM/VMMR0/VMMR0StackBack-darwin.asm

    r91812 r91820  
    3131SUPR0StackWrapperGeneric pdmCritSectRwEnterExcl, 6
    3232SUPR0StackWrapperGeneric pdmCritSectRwLeaveExclWorker, 6
     33SUPR0StackWrapperGeneric pgmR0PoolGrowOnKrnlStk, 3
    3334
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