VirtualBox

Changeset 87538 in vbox


Ignore:
Timestamp:
Feb 2, 2021 3:03:56 PM (4 years ago)
Author:
vboxsync
Message:

VMM/HMSVM: Eliminated HMR0PERVM::svm::fFeatures and made the ring-0 code use g_fHmSvmFeatures instead. bugref:9217

Location:
trunk/src/VBox/VMM
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/VMM/VMMAll/HMSVMAll.cpp

    r87511 r87538  
    184184{
    185185#ifdef IN_RING0
    186     bool const fVGif    = RT_BOOL(pVM->hmr0.s.svm.fFeatures & X86_CPUID_SVM_FEATURE_EDX_VGIF);
     186    bool const fVGif    = RT_BOOL(g_fHmSvmFeatures & X86_CPUID_SVM_FEATURE_EDX_VGIF);
    187187#else
    188188    bool const fVGif    = RT_BOOL(pVM->hm.s.svm.fFeaturesForRing3 & X86_CPUID_SVM_FEATURE_EDX_VGIF);
  • trunk/src/VBox/VMM/VMMR0/HMR0.cpp

    r87537 r87538  
    134134uint32_t                g_uHmSvmRev;
    135135/** SVM feature bits from cpuid 0x8000000a */
    136 uint32_t                g_uHmSvmFeatures;
     136uint32_t                g_fHmSvmFeatures;
    137137
    138138
     
    543543        /* Query AMD features. */
    544544        uint32_t u32Dummy;
    545         ASMCpuId(0x8000000a, &g_uHmSvmRev, &g_uHmMaxAsid, &u32Dummy, &g_uHmSvmFeatures);
     545        ASMCpuId(0x8000000a, &g_uHmSvmRev, &g_uHmMaxAsid, &u32Dummy, &g_fHmSvmFeatures);
    546546
    547547        /*
     
    11991199    {
    12001200        pVM->hm.s.svm.u32Rev            = g_uHmSvmRev;
    1201         pVM->hm.s.svm.fFeaturesForRing3 = pVM->hmr0.s.svm.fFeatures = g_uHmSvmFeatures;
     1201        pVM->hm.s.svm.fFeaturesForRing3 = g_fHmSvmFeatures;
    12021202        pVM->hm.s.svm.u64MsrHwcr        = g_HmMsrs.u.svm.u64MsrHwcr;
    12031203        /* If you need to tweak host MSRs for testing SVM R0 code, do it here. */
  • trunk/src/VBox/VMM/VMMR0/HMSVMR0.cpp

    r87522 r87538  
    867867{
    868868    PCVMCC pVM = pVCpu->CTX_SUFF(pVM);
    869     bool const fHostVmcbCleanBits = RT_BOOL(pVM->hmr0.s.svm.fFeatures & X86_CPUID_SVM_FEATURE_EDX_VMCB_CLEAN);
     869    bool const fHostVmcbCleanBits = RT_BOOL(g_fHmSvmFeatures & X86_CPUID_SVM_FEATURE_EDX_VMCB_CLEAN);
    870870    if (!fIsNestedGuest)
    871871        return fHostVmcbCleanBits;
     
    885885#ifdef VBOX_WITH_NESTED_HWVIRT_SVM
    886886    if (CPUMIsGuestInSvmNestedHwVirtMode(&pVCpu->cpum.GstCtx))
    887         return (pVM->hmr0.s.svm.fFeatures & X86_CPUID_SVM_FEATURE_EDX_DECODE_ASSISTS)
     887        return (g_fHmSvmFeatures & X86_CPUID_SVM_FEATURE_EDX_DECODE_ASSISTS)
    888888            &&  pVM->cpum.ro.GuestFeatures.fSvmDecodeAssists;
    889889#endif
    890     return RT_BOOL(pVM->hmr0.s.svm.fFeatures & X86_CPUID_SVM_FEATURE_EDX_DECODE_ASSISTS);
     890    return RT_BOOL(g_fHmSvmFeatures & X86_CPUID_SVM_FEATURE_EDX_DECODE_ASSISTS);
    891891}
    892892
     
    903903#ifdef VBOX_WITH_NESTED_HWVIRT_SVM
    904904    if (CPUMIsGuestInSvmNestedHwVirtMode(&pVCpu->cpum.GstCtx))
    905         return (pVM->hmr0.s.svm.fFeatures & X86_CPUID_SVM_FEATURE_EDX_NRIP_SAVE)
     905        return (g_fHmSvmFeatures & X86_CPUID_SVM_FEATURE_EDX_NRIP_SAVE)
    906906            &&  pVM->cpum.ro.GuestFeatures.fSvmNextRipSave;
    907907#endif
    908     return RT_BOOL(pVM->hmr0.s.svm.fFeatures & X86_CPUID_SVM_FEATURE_EDX_NRIP_SAVE);
     908    return RT_BOOL(g_fHmSvmFeatures & X86_CPUID_SVM_FEATURE_EDX_NRIP_SAVE);
    909909}
    910910
     
    10031003     * Determin some configuration parameters.
    10041004     */
    1005     bool const fPauseFilter          = RT_BOOL(pVM->hmr0.s.svm.fFeatures & X86_CPUID_SVM_FEATURE_EDX_PAUSE_FILTER);
    1006     bool const fPauseFilterThreshold = RT_BOOL(pVM->hmr0.s.svm.fFeatures & X86_CPUID_SVM_FEATURE_EDX_PAUSE_FILTER_THRESHOLD);
     1005    bool const fPauseFilter          = RT_BOOL(g_fHmSvmFeatures & X86_CPUID_SVM_FEATURE_EDX_PAUSE_FILTER);
     1006    bool const fPauseFilterThreshold = RT_BOOL(g_fHmSvmFeatures & X86_CPUID_SVM_FEATURE_EDX_PAUSE_FILTER_THRESHOLD);
    10071007    bool const fUsePauseFilter       = fPauseFilter && pVM->hm.s.svm.cPauseFilter;
    10081008
    1009     bool const fLbrVirt              = RT_BOOL(pVM->hmr0.s.svm.fFeatures & X86_CPUID_SVM_FEATURE_EDX_LBR_VIRT);
     1009    bool const fLbrVirt              = RT_BOOL(g_fHmSvmFeatures & X86_CPUID_SVM_FEATURE_EDX_LBR_VIRT);
    10101010    bool const fUseLbrVirt           = fLbrVirt && pVM->hm.s.svm.fLbrVirt; /** @todo IEM implementation etc. */
    10111011
    10121012#ifdef VBOX_WITH_NESTED_HWVIRT_SVM
    1013     bool const fVirtVmsaveVmload     = RT_BOOL(pVM->hmr0.s.svm.fFeatures & X86_CPUID_SVM_FEATURE_EDX_VIRT_VMSAVE_VMLOAD);
     1013    bool const fVirtVmsaveVmload     = RT_BOOL(g_fHmSvmFeatures & X86_CPUID_SVM_FEATURE_EDX_VIRT_VMSAVE_VMLOAD);
    10141014    bool const fUseVirtVmsaveVmload  = fVirtVmsaveVmload && pVM->hm.s.svm.fVirtVmsaveVmload && fNestedPaging;
    10151015
    1016     bool const fVGif                 = RT_BOOL(pVM->hmr0.s.svm.fFeatures & X86_CPUID_SVM_FEATURE_EDX_VGIF);
     1016    bool const fVGif                 = RT_BOOL(g_fHmSvmFeatures & X86_CPUID_SVM_FEATURE_EDX_VGIF);
    10171017    bool const fUseVGif              = fVGif && pVM->hm.s.svm.fVGif;
    10181018#endif
     
    13661366            else
    13671367            {
    1368                 if (pVM->hmr0.s.svm.fFeatures & X86_CPUID_SVM_FEATURE_EDX_FLUSH_BY_ASID)
     1368                if (g_fHmSvmFeatures & X86_CPUID_SVM_FEATURE_EDX_FLUSH_BY_ASID)
    13691369                    pVmcb->ctrl.TLBCtrl.n.u8TLBFlush = SVM_TLB_FLUSH_SINGLE_CONTEXT;
    13701370                else
     
    20532053
    20542054            HMSVM_ASSERT_NOT_IN_NESTED_GUEST(pCtx);                                /* Nested VGIF is not supported yet. */
    2055             Assert(pVM->hmr0.s.svm.fFeatures & X86_CPUID_SVM_FEATURE_EDX_VGIF);    /* Physical hardware supports VGIF. */
     2055            Assert(g_fHmSvmFeatures & X86_CPUID_SVM_FEATURE_EDX_VGIF);    /* Physical hardware supports VGIF. */
    20562056            Assert(HMIsSvmVGifActive(pVM));                                        /* Outer VM has enabled VGIF. */
    20572057            NOREF(pVM);
     
    41064106     */
    41074107    PVMCC pVM = pVCpu->CTX_SUFF(pVM);
    4108     if (RT_UNLIKELY(   !pVM->hmr0.s.svm.fFeatures
     4108    if (RT_UNLIKELY(   !g_fHmSvmFeatures
    41094109                    &&  pVCpu->hm.s.Event.fPending
    41104110                    &&  SVM_EVENT_GET_TYPE(pVCpu->hm.s.Event.u64IntInfo) == SVM_EVENT_NMI))
  • trunk/src/VBox/VMM/include/HMInternal.h

    r87536 r87538  
    689689        bool                        fAlwaysFlushTLB;
    690690        bool                        afAlignment0[3];
    691         /** SVM feature bits from cpuid 0x8000000a, safe ring-0 copy. */
    692         uint32_t                    fFeatures;
    693691    } svm;
    694692} HMR0PERVM;
     
    14521450extern bool             g_fHmSvmSupported;
    14531451extern uint32_t         g_uHmSvmRev;
    1454 extern uint32_t         g_uHmSvmFeatures;
     1452extern uint32_t         g_fHmSvmFeatures;
    14551453
    14561454extern SUPHWVIRTMSRS    g_HmMsrs;
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