VirtualBox

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


Ignore:
Timestamp:
Feb 3, 2021 1:23:13 PM (4 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
142590
Message:

VMM/HM: Moved the 'ForRing3' and 'ForLog' bits to the back of the HM structure. Configuration bits too, except for VMX/SVM specific ones as those fit in alignment space (can be moved later if needed). bugref:9217

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

Legend:

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

    r87559 r87563  
    11751175        pVM->hm.s.vmx.fUsePreemptTimerCfg           = pVM->hmr0.s.vmx.fUsePreemptTimer;
    11761176        pVM->hm.s.vmx.cPreemptTimerShift            = g_cHmVmxPreemptTimerShift;
    1177         pVM->hm.s.vmx.u64HostCr4ForRing3            = g_uHmVmxHostCr4;
    1178         pVM->hm.s.vmx.u64HostMsrEferForRing3        = g_uHmVmxHostMsrEfer;
    1179         pVM->hm.s.vmx.u64HostSmmMonitorCtlForRing3  = g_uHmVmxHostSmmMonitorCtl;
    1180         HMGetVmxMsrsFromHwvirtMsrs(&g_HmMsrs, &pVM->hm.s.vmx.MsrsForRing3);
     1177        pVM->hm.s.ForR3.vmx.u64HostCr4              = g_uHmVmxHostCr4;
     1178        pVM->hm.s.ForR3.vmx.u64HostMsrEfer          = g_uHmVmxHostMsrEfer;
     1179        pVM->hm.s.ForR3.vmx.u64HostSmmMonitorCtl    = g_uHmVmxHostSmmMonitorCtl;
     1180        HMGetVmxMsrsFromHwvirtMsrs(&g_HmMsrs, &pVM->hm.s.ForR3.vmx.Msrs);
    11811181        /* If you need to tweak host MSRs for testing VMX R0 code, do it here. */
    11821182
    11831183        /* Enable VPID if supported and configured. */
    11841184        if (g_HmMsrs.u.vmx.ProcCtls2.n.allowed1 & VMX_PROC_CTLS2_VPID)
    1185             pVM->hm.s.vmx.fVpidForRing3
    1186                 = pVM->hmr0.s.vmx.fVpid = pVM->hm.s.vmx.fAllowVpid; /* Can be overridden by CFGM in HMR3Init(). */
     1185            pVM->hm.s.ForR3.vmx.fVpid = pVM->hmr0.s.vmx.fVpid = pVM->hm.s.vmx.fAllowVpid; /* Can be overridden by CFGM in HMR3Init(). */
    11871186
    11881187        /* Use VMCS shadowing if supported. */
    11891188        pVM->hmr0.s.vmx.fUseVmcsShadowing = pVM->cpum.ro.GuestFeatures.fVmx
    11901189                                         && (g_HmMsrs.u.vmx.ProcCtls2.n.allowed1 & VMX_PROC_CTLS2_VMCS_SHADOWING);
    1191         pVM->hm.s.vmx.fUseVmcsShadowingForRing3 = pVM->hmr0.s.vmx.fUseVmcsShadowing;
     1190        pVM->hm.s.ForR3.vmx.fUseVmcsShadowing = pVM->hmr0.s.vmx.fUseVmcsShadowing;
    11921191
    11931192        /* Use the VMCS controls for swapping the EFER MSR if supported. */
    1194         pVM->hm.s.vmx.fSupportsVmcsEferForRing3 = g_fHmVmxSupportsVmcsEfer;
     1193        pVM->hm.s.ForR3.vmx.fSupportsVmcsEfer = g_fHmVmxSupportsVmcsEfer;
    11951194
    11961195#if 0
     
    12101209    else if (pVM->hm.s.svm.fSupported)
    12111210    {
    1212         pVM->hm.s.svm.u32Rev            = g_uHmSvmRev;
    1213         pVM->hm.s.svm.fFeaturesForRing3 = g_fHmSvmFeatures;
    1214         pVM->hm.s.svm.u64MsrHwcr        = g_HmMsrs.u.svm.u64MsrHwcr;
     1211        pVM->hm.s.ForR3.svm.u32Rev      = g_uHmSvmRev;
     1212        pVM->hm.s.ForR3.svm.fFeatures  = g_fHmSvmFeatures;
     1213        pVM->hm.s.ForR3.svm.u64MsrHwcr  = g_HmMsrs.u.svm.u64MsrHwcr;
    12151214        /* If you need to tweak host MSRs for testing SVM R0 code, do it here. */
    12161215    }
    1217     pVM->hm.s.rcInit              = g_rcHmInit;
    1218     pVM->hm.s.uMaxAsidForLog      = g_uHmMaxAsid;
     1216    pVM->hm.s.ForR3.rcInit      = g_rcHmInit;
     1217    pVM->hm.s.ForR3.uMaxAsid    = g_uHmMaxAsid;
    12191218
    12201219    /*
     
    12751274        pVCpu->hmr0.s.fWorldSwitcher = fWorldSwitcher;
    12761275    }
    1277     pVM->hm.s.fWorldSwitcherForLog = fWorldSwitcher;
     1276    pVM->hm.s.ForR3.fWorldSwitcher = fWorldSwitcher;
    12781277
    12791278
  • trunk/src/VBox/VMM/VMMR0/HMSVMR0.cpp

    r87561 r87563  
    994994    AssertReturn(pVM->hm.s.svm.fSupported, VERR_INCOMPATIBLE_CONFIG);
    995995    bool const fNestedPaging = pVM->hm.s.fNestedPagingCfg;
    996     AssertReturn(   !fNestedPaging
    997                  || (pVM->hm.s.svm.fFeaturesForRing3 & X86_CPUID_SVM_FEATURE_EDX_NESTED_PAGING),
    998                  VERR_INCOMPATIBLE_CONFIG);
     996    AssertReturn(!fNestedPaging || (g_fHmSvmFeatures & X86_CPUID_SVM_FEATURE_EDX_NESTED_PAGING), VERR_INCOMPATIBLE_CONFIG);
    999997    pVM->hmr0.s.fNestedPaging = fNestedPaging;
    1000998    pVM->hmr0.s.fAllow64BitGuests = pVM->hm.s.fAllow64BitGuestsCfg;
  • trunk/src/VBox/VMM/VMMR0/HMVMXR0.cpp

    r87562 r87563  
    14531453        VMXReadVmcs32(VMX_VMCS32_RO_VM_INSTR_ERROR, &pVCpu->hm.s.vmx.LastError.u32InstrError);
    14541454    }
    1455     pVCpu->CTX_SUFF(pVM)->hm.s.rcInit = rc;
     1455    pVCpu->CTX_SUFF(pVM)->hm.s.ForR3.rcInit = rc;
    14561456}
    14571457
     
    17381738
    17391739        if (pVM)
    1740             pVM->hm.s.vmx.HCPhysVmxEnableError = HCPhysCpuPage;
     1740            pVM->hm.s.ForR3.vmx.HCPhysVmxEnableError = HCPhysCpuPage;
    17411741    }
    17421742
     
    33513351                    LogRelFunc(("Only SINGLE_CONTEXT_RETAIN_GLOBALS supported. Ignoring VPID.\n"));
    33523352                pVM->hmr0.s.vmx.enmTlbFlushVpid = VMXTLBFLUSHVPID_NOT_SUPPORTED;
    3353                 pVM->hm.s.vmx.fVpidForRing3 = pVM->hmr0.s.vmx.fVpid = false;
     3353                pVM->hmr0.s.vmx.fVpid          = false;
    33543354            }
    33553355        }
     
    33593359            Log4Func(("VPID supported without INVEPT support. Ignoring VPID.\n"));
    33603360            pVM->hmr0.s.vmx.enmTlbFlushVpid = VMXTLBFLUSHVPID_NOT_SUPPORTED;
    3361             pVM->hm.s.vmx.fVpidForRing3 = pVM->hmr0.s.vmx.fVpid = false;
     3361            pVM->hmr0.s.vmx.fVpid          = false;
    33623362        }
    33633363    }
     
    33793379     * Copy out the result to ring-3.
    33803380     */
    3381     pVM->hm.s.vmx.fVpidForRing3           = pVM->hmr0.s.vmx.fVpid;
    3382     pVM->hm.s.vmx.enmTlbFlushTypeForRing3 = pVM->hmr0.s.vmx.enmTlbFlushType;
    3383     pVM->hm.s.vmx.enmTlbFlushEptForRing3  = pVM->hmr0.s.vmx.enmTlbFlushEpt;
    3384     pVM->hm.s.vmx.enmTlbFlushVpidForRing3 = pVM->hmr0.s.vmx.enmTlbFlushVpid;
     3381    pVM->hm.s.ForR3.vmx.fVpid           = pVM->hmr0.s.vmx.fVpid;
     3382    pVM->hm.s.ForR3.vmx.enmTlbFlushType = pVM->hmr0.s.vmx.enmTlbFlushType;
     3383    pVM->hm.s.ForR3.vmx.enmTlbFlushEpt  = pVM->hmr0.s.vmx.enmTlbFlushEpt;
     3384    pVM->hm.s.ForR3.vmx.enmTlbFlushVpid = pVM->hmr0.s.vmx.enmTlbFlushVpid;
    33853385    return VINF_SUCCESS;
    33863386}
     
    34823482    pVM->hmr0.s.vmx.idLbrTosMsr = idLbrTosMsr;
    34833483
    3484     pVM->hm.s.vmx.idLbrFromIpMsrFirstForRing3 = pVM->hmr0.s.vmx.idLbrFromIpMsrFirst = idLbrFromIpMsrFirst;
    3485     pVM->hm.s.vmx.idLbrFromIpMsrLastForRing3  = pVM->hmr0.s.vmx.idLbrFromIpMsrLast  = idLbrFromIpMsrLast;
    3486 
    3487     pVM->hm.s.vmx.idLbrToIpMsrFirstForRing3   = pVM->hmr0.s.vmx.idLbrToIpMsrFirst   = idLbrToIpMsrFirst;
    3488     pVM->hm.s.vmx.idLbrToIpMsrLastForRing3    = pVM->hmr0.s.vmx.idLbrToIpMsrLast    = idLbrToIpMsrLast;
     3484    pVM->hm.s.ForR3.vmx.idLbrFromIpMsrFirst = pVM->hmr0.s.vmx.idLbrFromIpMsrFirst = idLbrFromIpMsrFirst;
     3485    pVM->hm.s.ForR3.vmx.idLbrFromIpMsrLast  = pVM->hmr0.s.vmx.idLbrFromIpMsrLast  = idLbrFromIpMsrLast;
     3486
     3487    pVM->hm.s.ForR3.vmx.idLbrToIpMsrFirst   = pVM->hmr0.s.vmx.idLbrToIpMsrFirst   = idLbrToIpMsrFirst;
     3488    pVM->hm.s.ForR3.vmx.idLbrToIpMsrLast    = pVM->hmr0.s.vmx.idLbrToIpMsrLast    = idLbrToIpMsrLast;
    34893489    return VINF_SUCCESS;
    34903490}
     
    45374537
    45384538    /* Initialize these always, see hmR3InitFinalizeR0().*/
    4539     pVM->hm.s.vmx.enmTlbFlushEptForRing3  = pVM->hmr0.s.vmx.enmTlbFlushEpt  = VMXTLBFLUSHEPT_NONE;
    4540     pVM->hm.s.vmx.enmTlbFlushVpidForRing3 = pVM->hmr0.s.vmx.enmTlbFlushVpid = VMXTLBFLUSHVPID_NONE;
     4539    pVM->hm.s.ForR3.vmx.enmTlbFlushEpt  = pVM->hmr0.s.vmx.enmTlbFlushEpt  = VMXTLBFLUSHEPT_NONE;
     4540    pVM->hm.s.ForR3.vmx.enmTlbFlushVpid = pVM->hmr0.s.vmx.enmTlbFlushVpid = VMXTLBFLUSHVPID_NONE;
    45414541
    45424542    /* Setup the tagged-TLB flush handlers. */
Note: See TracChangeset for help on using the changeset viewer.

© 2025 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette