VirtualBox

Changeset 107854 in vbox for trunk/src/VBox/VMM/VMMAll


Ignore:
Timestamp:
Jan 18, 2025 11:59:26 PM (4 months ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
167053
Message:

x86.h,VMM: More AMD CPUID bits; addressed some old todos related to these; fixed bugs in svn & vmx world switcher (sanity checks, ++). jiraref:VBP-947 bugref:10738

File:
1 edited

Legend:

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

    r107749 r107854  
    14031403
    14041404
     1405void cpumCpuIdExplodeFeaturesX86SetSummaryBits(CPUMFEATURESX86 *pFeatures)
     1406{
     1407    /* Summary or all bits indicating the presence of the IA32_SPEC_CTRL MSR. */
     1408    pFeatures->fSpecCtrlMsr = pFeatures->fIbrs
     1409                            | pFeatures->fStibp
     1410                            | pFeatures->fSsbd
     1411                            | pFeatures->fPsfd
     1412                            | pFeatures->fIpredCtrl
     1413                            | pFeatures->fRrsbaCtrl
     1414                            | pFeatures->fDdpdU
     1415                            | pFeatures->fBhiCtrl
     1416                            ;
     1417}
     1418
     1419
    14051420int cpumCpuIdExplodeFeaturesX86(PCCPUMCPUIDLEAF paLeaves, uint32_t cLeaves, PCCPUMMSRS pMsrs, CPUMFEATURESX86 *pFeatures)
    14061421{
     
    15651580            pFeatures->fMmx            |= RT_BOOL(pExtLeaf->uEdx & X86_CPUID_AMD_FEATURE_EDX_MMX);
    15661581            pFeatures->fTsc            |= RT_BOOL(pExtLeaf->uEdx & X86_CPUID_AMD_FEATURE_EDX_TSC);
    1567             pFeatures->fIbpb           |= pExtLeaf8 && (pExtLeaf8->uEbx & X86_CPUID_AMD_EFEID_EBX_IBPB);
    15681582            pFeatures->fAmdMmxExts      = RT_BOOL(pExtLeaf->uEdx & X86_CPUID_AMD_FEATURE_EDX_AXMMX);
    15691583            pFeatures->fXop             = RT_BOOL(pExtLeaf->uEcx & X86_CPUID_AMD_FEATURE_ECX_XOP);
    15701584            pFeatures->fTbm             = RT_BOOL(pExtLeaf->uEcx & X86_CPUID_AMD_FEATURE_ECX_TBM);
    15711585            pFeatures->fSvm             = RT_BOOL(pExtLeaf->uEcx & X86_CPUID_AMD_FEATURE_ECX_SVM);
     1586
     1587            if (pExtLeaf8)
     1588            {
     1589                pFeatures->fIbpb      |= RT_BOOL(pExtLeaf8->uEbx & X86_CPUID_AMD_EFEID_EBX_IBPB);
     1590                pFeatures->fIbrs      |= RT_BOOL(pExtLeaf8->uEbx & X86_CPUID_AMD_EFEID_EBX_IBRS);
     1591                pFeatures->fStibp     |= RT_BOOL(pExtLeaf8->uEbx & X86_CPUID_AMD_EFEID_EBX_STIBP);
     1592                pFeatures->fSsbd      |= RT_BOOL(pExtLeaf8->uEbx & X86_CPUID_AMD_EFEID_EBX_SPEC_CTRL_SSBD);
     1593                pFeatures->fPsfd      |= RT_BOOL(pExtLeaf8->uEbx & X86_CPUID_AMD_EFEID_EBX_PSFD);
     1594            }
     1595
     1596            PCCPUMCPUIDLEAF pExtLeaf21 = cpumCpuIdFindLeaf(paLeaves, cLeaves, 0x80000021);
     1597            if (pExtLeaf21)
     1598            {
     1599                /** @todo IBPB_BRTYPE is implied on Zen 1 & 2.
     1600                 *  https://www.amd.com/content/dam/amd/en/documents/corporate/cr/speculative-return-stack-overflow-whitepaper.pdf */
     1601            }
     1602
    15721603            if (pFeatures->fSvm)
    15731604            {
     
    16551686    else
    16561687        AssertLogRelReturn(cLeaves == 0, VERR_CPUM_IPE_1);
     1688
     1689    cpumCpuIdExplodeFeaturesX86SetSummaryBits(pFeatures);
    16571690    return VINF_SUCCESS;
    16581691}
     
    16621695 * Helper for extracting feature bits from IA32_ARCH_CAPABILITIES.
    16631696 */
    1664 static void cpumCpuIdExplodeArchCapabilities(CPUMFEATURESX86 *pFeatures, bool fHasArchCap, uint64_t fArchVal)
     1697void cpumCpuIdExplodeArchCapabilities(CPUMFEATURESX86 *pFeatures, bool fHasArchCap, uint64_t fArchVal)
    16651698{
    16661699    Assert(fHasArchCap || fArchVal == 0);
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