VirtualBox

Changeset 87519 in vbox for trunk/src/VBox/VMM/VMMR0


Ignore:
Timestamp:
Feb 1, 2021 9:17:51 PM (4 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
142544
Message:

VMM/HM: Make a R0 copy of HM::cMaxResumeLoopsCfg and do proper validation. bugref:9217

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

Legend:

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

    r87511 r87519  
    11851185     * Can be overriden using CFGM.
    11861186     */
    1187     if (!pVM->hm.s.cMaxResumeLoops)
    1188     {
    1189         pVM->hm.s.cMaxResumeLoops       = 1024;
     1187    uint32_t cMaxResumeLoops = pVM->hm.s.cMaxResumeLoopsCfg;
     1188    if (!cMaxResumeLoops)
     1189    {
     1190        cMaxResumeLoops     = 1024;
    11901191        if (RTThreadPreemptIsPendingTrusty())
    1191             pVM->hm.s.cMaxResumeLoops   = 8192;
    1192     }
     1192            cMaxResumeLoops = 8192;
     1193    }
     1194    else if (cMaxResumeLoops > 16384)
     1195        cMaxResumeLoops = 16384;
     1196    else if (cMaxResumeLoops < 32)
     1197        cMaxResumeLoops = 32;
     1198    pVM->hm.s.cMaxResumeLoopsCfg = pVM->hmr0.s.cMaxResumeLoops = cMaxResumeLoops;
    11931199
    11941200    /*
  • trunk/src/VBox/VMM/VMMR0/HMSVMR0.cpp

    r87518 r87519  
    44754475static VBOXSTRICTRC hmR0SvmRunGuestCodeNormal(PVMCPUCC pVCpu, uint32_t *pcLoops)
    44764476{
    4477     uint32_t const cMaxResumeLoops = pVCpu->CTX_SUFF(pVM)->hm.s.cMaxResumeLoops;
     4477    uint32_t const cMaxResumeLoops = pVCpu->CTX_SUFF(pVM)->hmr0.s.cMaxResumeLoops;
    44784478    Assert(pcLoops);
    44794479    Assert(*pcLoops <= cMaxResumeLoops);
     
    45504550static VBOXSTRICTRC hmR0SvmRunGuestCodeStep(PVMCPUCC pVCpu, uint32_t *pcLoops)
    45514551{
    4552     uint32_t const cMaxResumeLoops = pVCpu->CTX_SUFF(pVM)->hm.s.cMaxResumeLoops;
     4552    uint32_t const cMaxResumeLoops = pVCpu->CTX_SUFF(pVM)->hmr0.s.cMaxResumeLoops;
    45534553    Assert(pcLoops);
    45544554    Assert(*pcLoops <= cMaxResumeLoops);
     
    46584658    HMSVM_ASSERT_IN_NESTED_GUEST(pCtx);
    46594659    Assert(pcLoops);
    4660     Assert(*pcLoops <= pVCpu->CTX_SUFF(pVM)->hm.s.cMaxResumeLoops);
     4660    Assert(*pcLoops <= pVCpu->CTX_SUFF(pVM)->hmr0.s.cMaxResumeLoops);
    46614661
    46624662    SVMTRANSIENT SvmTransient;
     
    47254725            else
    47264726            {
    4727                 if (++(*pcLoops) <= pVCpu->CTX_SUFF(pVM)->hm.s.cMaxResumeLoops)
     4727                if (++(*pcLoops) <= pVCpu->CTX_SUFF(pVM)->hmr0.s.cMaxResumeLoops)
    47284728                    continue;
    47294729                STAM_COUNTER_INC(&pVCpu->hm.s.StatSwitchMaxResumeLoops);
     
    63576357     */
    63586358    bool const fSupportsNextRipSave = hmR0SvmSupportsNextRipSave(pVCpu);
    6359     if (   pVCpu->CTX_SUFF(pVM)->hm.s.fTPRPatchingActive
    6360         && idMsr == MSR_K8_LSTAR)
     6359    if (   idMsr == MSR_K8_LSTAR
     6360        && pVCpu->CTX_SUFF(pVM)->hm.s.fTPRPatchingActive)
    63616361    {
    63626362        unsigned cbInstr;
  • trunk/src/VBox/VMM/VMMR0/HMVMXR0.cpp

    r87518 r87519  
    1128811288static VBOXSTRICTRC hmR0VmxRunGuestCodeNormal(PVMCPUCC pVCpu, uint32_t *pcLoops)
    1128911289{
    11290     uint32_t const cMaxResumeLoops = pVCpu->CTX_SUFF(pVM)->hm.s.cMaxResumeLoops;
     11290    uint32_t const cMaxResumeLoops = pVCpu->CTX_SUFF(pVM)->hmr0.s.cMaxResumeLoops;
    1129111291    Assert(pcLoops);
    1129211292    Assert(*pcLoops <= cMaxResumeLoops);
     
    1140111401static VBOXSTRICTRC hmR0VmxRunGuestCodeNested(PVMCPUCC pVCpu, uint32_t *pcLoops)
    1140211402{
    11403     uint32_t const cMaxResumeLoops = pVCpu->CTX_SUFF(pVM)->hm.s.cMaxResumeLoops;
     11403    uint32_t const cMaxResumeLoops = pVCpu->CTX_SUFF(pVM)->hmr0.s.cMaxResumeLoops;
    1140411404    Assert(pcLoops);
    1140511405    Assert(*pcLoops <= cMaxResumeLoops);
     
    1256312563static VBOXSTRICTRC hmR0VmxRunGuestCodeDebug(PVMCPUCC pVCpu, uint32_t *pcLoops)
    1256412564{
    12565     uint32_t const cMaxResumeLoops = pVCpu->CTX_SUFF(pVM)->hm.s.cMaxResumeLoops;
     12565    uint32_t const cMaxResumeLoops = pVCpu->CTX_SUFF(pVM)->hmr0.s.cMaxResumeLoops;
    1256612566    Assert(pcLoops);
    1256712567    Assert(*pcLoops <= cMaxResumeLoops);
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