VirtualBox

Changeset 101309 in vbox


Ignore:
Timestamp:
Sep 29, 2023 5:58:03 AM (16 months ago)
Author:
vboxsync
Message:

VMM: Detect and log new VMX features, part 2.

Location:
trunk
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/include/VBox/vmm/cpum-x86-amd64.h

    r100994 r101309  
    11131113    /** VMX: Supports XSAVES/XRSTORS. */
    11141114    uint32_t        fVmxXsavesXrstors : 1;
     1115    /** VMX: Supports PASID translation. */
     1116    uint32_t        fVmxPasidTranslate : 1;
    11151117    /** VMX: Supports mode-based execute control for EPT. */
    11161118    uint32_t        fVmxModeBasedExecuteEpt : 1;
     
    11231125    /** VMX: Supports TPAUSE, UMONITOR, or UMWAIT. */
    11241126    uint32_t        fVmxUserWaitPause : 1;
     1127    /** VMX: Supports PCONFIG. */
     1128    uint32_t        fVmxPconfig : 1;
    11251129    /** VMX: Supports enclave (ENCLV) exiting. */
    11261130    uint32_t        fVmxEnclvExit : 1;
     1131    /** VMX: Supports VMM bus-lock detection. */
     1132    uint32_t        fVmxBusLockDetect : 1;
     1133    /** VMX: Supports instruction timeout. */
     1134    uint32_t        fVmxInstrTimeout : 1;
    11271135    /** @} */
    11281136
     
    11311139    /** VMX: Supports LOADIWKEY exiting. */
    11321140    uint32_t        fVmxLoadIwKeyExit : 1;
     1141    /** VMX: Supports hypervisor-managed linear address translation (HLAT). */
     1142    uint32_t        fVmxHlat : 1;
     1143    /** VMX: Supports EPT paging-write control. */
     1144    uint32_t        fVmxEptPagingWrite : 1;
     1145    /** VMX: Supports Guest-paging verification. */
     1146    uint32_t        fVmxGstPagingVerify : 1;
     1147    /** VMX: Supports IPI virtualization. */
     1148    uint32_t        fVmxIpiVirt : 1;
     1149    /** VMX: Supports virtualize IA32_SPEC_CTRL. */
     1150    uint32_t        fVmxVirtSpecCtrl : 1;
    11331151    /** @} */
    11341152
     
    11821200
    11831201    /** VMX: Padding / reserved for future features. */
    1184     uint32_t        fVmxPadding0 : 16;
     1202    uint32_t        fVmxPadding0 : 7;
    11851203    /** VMX: Padding / reserved for future, making it a total of 128 bits.  */
    11861204    uint32_t        fVmxPadding1;
  • trunk/src/VBox/VMM/VMMAll/CPUMAllCpuId.cpp

    r100935 r101309  
    13331333        pFeatures->fVmxConcealVmxFromPt      = RT_BOOL(fProcCtls2 & VMX_PROC_CTLS2_CONCEAL_VMX_FROM_PT);
    13341334        pFeatures->fVmxXsavesXrstors         = RT_BOOL(fProcCtls2 & VMX_PROC_CTLS2_XSAVES_XRSTORS);
     1335        pFeatures->fVmxPasidTranslate        = RT_BOOL(fProcCtls2 & VMX_PROC_CTLS2_PASID_TRANSLATE);
    13351336        pFeatures->fVmxModeBasedExecuteEpt   = RT_BOOL(fProcCtls2 & VMX_PROC_CTLS2_MODE_BASED_EPT_PERM);
    13361337        pFeatures->fVmxSppEpt                = RT_BOOL(fProcCtls2 & VMX_PROC_CTLS2_SPP_EPT);
     
    13381339        pFeatures->fVmxUseTscScaling         = RT_BOOL(fProcCtls2 & VMX_PROC_CTLS2_TSC_SCALING);
    13391340        pFeatures->fVmxUserWaitPause         = RT_BOOL(fProcCtls2 & VMX_PROC_CTLS2_USER_WAIT_PAUSE);
     1341        pFeatures->fVmxPconfig               = RT_BOOL(fProcCtls2 & VMX_PROC_CTLS2_PCONFIG);
    13401342        pFeatures->fVmxEnclvExit             = RT_BOOL(fProcCtls2 & VMX_PROC_CTLS2_ENCLV_EXIT);
     1343        pFeatures->fVmxBusLockDetect         = RT_BOOL(fProcCtls2 & VMX_PROC_CTLS2_BUS_LOCK_DETECT);
     1344        pFeatures->fVmxInstrTimeout          = RT_BOOL(fProcCtls2 & VMX_PROC_CTLS2_INSTR_TIMEOUT);
    13411345    }
    13421346
     
    13451349        uint64_t const fProcCtls3 = pFeatures->fVmxTertiaryExecCtls ? pVmxMsrs->u64ProcCtls3 : 0;
    13461350        pFeatures->fVmxLoadIwKeyExit         = RT_BOOL(fProcCtls3 & VMX_PROC_CTLS3_LOADIWKEY_EXIT);
     1351        pFeatures->fVmxHlat                  = RT_BOOL(fProcCtls3 & VMX_PROC_CTLS3_HLAT);
     1352        pFeatures->fVmxEptPagingWrite        = RT_BOOL(fProcCtls3 & VMX_PROC_CTLS3_EPT_PAGING_WRITE);
     1353        pFeatures->fVmxGstPagingVerify       = RT_BOOL(fProcCtls3 & VMX_PROC_CTLS3_GST_PAGING_VERIFY);
     1354        pFeatures->fVmxIpiVirt               = RT_BOOL(fProcCtls3 & VMX_PROC_CTLS3_IPI_VIRT);
     1355        pFeatures->fVmxVirtSpecCtrl          = RT_BOOL(fProcCtls3 & VMX_PROC_CTLS3_VIRT_SPEC_CTRL);
    13471356    }
    13481357
  • trunk/src/VBox/VMM/VMMR3/CPUM.cpp

    r100940 r101309  
    12501250        VMXFEATDUMP("VmcsShadowing - VMCS shadowing                         ", fVmxVmcsShadowing);
    12511251        VMXFEATDUMP("RdseedExiting - RDSEED exiting                         ", fVmxRdseedExit);
    1252         VMXFEATDUMP("PML - Page-Modification Log (PML)                      ", fVmxPml);
     1252        VMXFEATDUMP("PML - Page-Modification Log                            ", fVmxPml);
    12531253        VMXFEATDUMP("EptVe - EPT violations can cause #VE                   ", fVmxEptXcptVe);
    12541254        VMXFEATDUMP("ConcealVmxFromPt - Conceal VMX from Processor Trace    ", fVmxConcealVmxFromPt);
    12551255        VMXFEATDUMP("XsavesXRstors - Enable XSAVES/XRSTORS                  ", fVmxXsavesXrstors);
     1256        VMXFEATDUMP("PasidTranslate - PASID translation                     ", fVmxPasidTranslate);
    12561257        VMXFEATDUMP("ModeBasedExecuteEpt - Mode-based execute permissions   ", fVmxModeBasedExecuteEpt);
    12571258        VMXFEATDUMP("SppEpt - Sub-page page write permissions for EPT       ", fVmxSppEpt);
     
    12591260        VMXFEATDUMP("UseTscScaling - Use TSC scaling                        ", fVmxUseTscScaling);
    12601261        VMXFEATDUMP("UserWaitPause - Enable TPAUSE, UMONITOR and UMWAIT     ", fVmxUserWaitPause);
     1262        VMXFEATDUMP("Pconfig - Enable PCONFIG                               ", fVmxPconfig);
    12611263        VMXFEATDUMP("EnclvExit - ENCLV exiting                              ", fVmxEnclvExit);
     1264        VMXFEATDUMP("BusLockDetect - VMM Bus-Lock detection                 ", fVmxBusLockDetect);
     1265        VMXFEATDUMP("InstrTimeout - Instruction timeout                     ", fVmxInstrTimeout);
    12621266
    12631267        /* Tertiary processor-based controls. */
    12641268        VMXFEATDUMP("LoadIwKeyExit - LOADIWKEY exiting                      ", fVmxLoadIwKeyExit);
     1269        VMXFEATDUMP("HLAT - Hypervisor-managed linear-address translation   ", fVmxHlat);
     1270        VMXFEATDUMP("EptPagingWrite - EPT paging-write                      ", fVmxEptPagingWrite);
     1271        VMXFEATDUMP("GstPagingVerify - Guest-paging verification            ", fVmxGstPagingVerify);
     1272        VMXFEATDUMP("IpiVirt - IPI virtualization                           ", fVmxIpiVirt);
     1273        VMXFEATDUMP("VirtSpecCtrl - Virtualize IA32_SPEC_CTRL               ", fVmxVirtSpecCtrl);
    12651274
    12661275        /* VM-entry controls. */
     
    12831292        /* Miscellaneous data. */
    12841293        VMXFEATDUMP("ExitSaveEferLma - Save IA32_EFER.LMA on VM-exit        ", fVmxExitSaveEferLma);
    1285         VMXFEATDUMP("IntelPt - Intel PT (Processor Trace) in VMX operation  ", fVmxPt);
     1294        VMXFEATDUMP("IntelPt - Intel Processor Trace in VMX operation       ", fVmxPt);
    12861295        VMXFEATDUMP("VmwriteAll - VMWRITE to any supported VMCS field       ", fVmxVmwriteAll);
    12871296        VMXFEATDUMP("EntryInjectSoftInt - Inject softint. with 0-len instr. ", fVmxEntryInjectSoftInt);
     
    14331442                                 | (pGuestFeatures->fVmxConcealVmxFromPt      << VMX_BF_PROC_CTLS2_CONCEAL_VMX_FROM_PT_SHIFT)
    14341443                                 | (pGuestFeatures->fVmxXsavesXrstors         << VMX_BF_PROC_CTLS2_XSAVES_XRSTORS_SHIFT     )
     1444                                 | (pGuestFeatures->fVmxPasidTranslate        << VMX_BF_PROC_CTLS2_PASID_TRANSLATE_SHIFT    )
    14351445                                 | (pGuestFeatures->fVmxModeBasedExecuteEpt   << VMX_BF_PROC_CTLS2_MODE_BASED_EPT_PERM_SHIFT)
    14361446                                 | (pGuestFeatures->fVmxSppEpt                << VMX_BF_PROC_CTLS2_SPP_EPT_SHIFT            )
     
    14381448                                 | (pGuestFeatures->fVmxUseTscScaling         << VMX_BF_PROC_CTLS2_TSC_SCALING_SHIFT        )
    14391449                                 | (pGuestFeatures->fVmxUserWaitPause         << VMX_BF_PROC_CTLS2_USER_WAIT_PAUSE_SHIFT    )
    1440                                  | (pGuestFeatures->fVmxEnclvExit             << VMX_BF_PROC_CTLS2_ENCLV_EXIT_SHIFT         );
     1450                                 | (pGuestFeatures->fVmxPconfig               << VMX_BF_PROC_CTLS2_PCONFIG_SHIFT            )
     1451                                 | (pGuestFeatures->fVmxEnclvExit             << VMX_BF_PROC_CTLS2_ENCLV_EXIT_SHIFT         )
     1452                                 | (pGuestFeatures->fVmxBusLockDetect         << VMX_BF_PROC_CTLS2_BUSLOCK_DETECT_SHIFT     )
     1453                                 | (pGuestFeatures->fVmxInstrTimeout          << VMX_BF_PROC_CTLS2_INSTR_TIMEOUT_SHIFT      );
    14411454        uint32_t const fAllowed0 = 0;
    14421455        uint32_t const fAllowed1 = fFeatures;
     
    14471460    if (pGuestFeatures->fVmxTertiaryExecCtls)
    14481461    {
    1449         pGuestVmxMsrs->u64ProcCtls3 = (pGuestFeatures->fVmxLoadIwKeyExit  << VMX_BF_PROC_CTLS3_LOADIWKEY_EXIT_SHIFT);
     1462        pGuestVmxMsrs->u64ProcCtls3 = (pGuestFeatures->fVmxLoadIwKeyExit   << VMX_BF_PROC_CTLS3_LOADIWKEY_EXIT_SHIFT)
     1463                                    | (pGuestFeatures->fVmxHlat            << VMX_BF_PROC_CTLS3_HLAT_SHIFT)
     1464                                    | (pGuestFeatures->fVmxEptPagingWrite  << VMX_BF_PROC_CTLS3_EPT_PAGING_WRITE_SHIFT)
     1465                                    | (pGuestFeatures->fVmxGstPagingVerify << VMX_BF_PROC_CTLS3_GST_PAGING_VERIFY_SHIFT)
     1466                                    | (pGuestFeatures->fVmxIpiVirt         << VMX_BF_PROC_CTLS3_IPI_VIRT_SHIFT)
     1467                                    | (pGuestFeatures->fVmxVirtSpecCtrl    << VMX_BF_PROC_CTLS3_VIRT_SPEC_CTRL_SHIFT);
    14501468    }
    14511469
     
    18671885    EmuFeat.fVmxConcealVmxFromPt      = 0;
    18681886    EmuFeat.fVmxXsavesXrstors         = 0;
     1887    EmuFeat.fVmxPasidTranslate        = 0;
    18691888    EmuFeat.fVmxModeBasedExecuteEpt   = 0;
    18701889    EmuFeat.fVmxSppEpt                = 0;
     
    18721891    EmuFeat.fVmxUseTscScaling         = 0;
    18731892    EmuFeat.fVmxUserWaitPause         = 0;
     1893    EmuFeat.fVmxPconfig               = 0;
    18741894    EmuFeat.fVmxEnclvExit             = 0;
     1895    EmuFeat.fVmxBusLockDetect         = 0;
     1896    EmuFeat.fVmxInstrTimeout          = 0;
    18751897    EmuFeat.fVmxLoadIwKeyExit         = 0;
     1898    EmuFeat.fVmxHlat                  = 0;
     1899    EmuFeat.fVmxEptPagingWrite        = 0;
     1900    EmuFeat.fVmxGstPagingVerify       = 0;
     1901    EmuFeat.fVmxIpiVirt               = 0;
     1902    EmuFeat.fVmxVirtSpecCtrl          = 0;
    18761903    EmuFeat.fVmxEntryLoadDebugCtls    = 1;
    18771904    EmuFeat.fVmxIa32eModeGuest        = 1;
     
    19491976    pGuestFeat->fVmxConcealVmxFromPt      = (pBaseFeat->fVmxConcealVmxFromPt      & EmuFeat.fVmxConcealVmxFromPt     );
    19501977    pGuestFeat->fVmxXsavesXrstors         = (pBaseFeat->fVmxXsavesXrstors         & EmuFeat.fVmxXsavesXrstors        );
     1978    pGuestFeat->fVmxPasidTranslate        = (pBaseFeat->fVmxPasidTranslate        & EmuFeat.fVmxPasidTranslate       );
    19511979    pGuestFeat->fVmxModeBasedExecuteEpt   = (pBaseFeat->fVmxModeBasedExecuteEpt   & EmuFeat.fVmxModeBasedExecuteEpt  );
    19521980    pGuestFeat->fVmxSppEpt                = (pBaseFeat->fVmxSppEpt                & EmuFeat.fVmxSppEpt               );
     
    19541982    pGuestFeat->fVmxUseTscScaling         = (pBaseFeat->fVmxUseTscScaling         & EmuFeat.fVmxUseTscScaling        );
    19551983    pGuestFeat->fVmxUserWaitPause         = (pBaseFeat->fVmxUserWaitPause         & EmuFeat.fVmxUserWaitPause        );
     1984    pGuestFeat->fVmxPconfig               = (pBaseFeat->fVmxPconfig               & EmuFeat.fVmxPconfig              );
    19561985    pGuestFeat->fVmxEnclvExit             = (pBaseFeat->fVmxEnclvExit             & EmuFeat.fVmxEnclvExit            );
     1986    pGuestFeat->fVmxBusLockDetect         = (pBaseFeat->fVmxBusLockDetect         & EmuFeat.fVmxBusLockDetect        );
     1987    pGuestFeat->fVmxInstrTimeout          = (pBaseFeat->fVmxInstrTimeout          & EmuFeat.fVmxInstrTimeout         );
    19571988    pGuestFeat->fVmxLoadIwKeyExit         = (pBaseFeat->fVmxLoadIwKeyExit         & EmuFeat.fVmxLoadIwKeyExit        );
     1989    pGuestFeat->fVmxHlat                  = (pBaseFeat->fVmxHlat                  & EmuFeat.fVmxHlat                 );
     1990    pGuestFeat->fVmxEptPagingWrite        = (pBaseFeat->fVmxEptPagingWrite        & EmuFeat.fVmxEptPagingWrite       );
     1991    pGuestFeat->fVmxGstPagingVerify       = (pBaseFeat->fVmxGstPagingVerify       & EmuFeat.fVmxGstPagingVerify      );
     1992    pGuestFeat->fVmxIpiVirt               = (pBaseFeat->fVmxIpiVirt               & EmuFeat.fVmxIpiVirt              );
     1993    pGuestFeat->fVmxVirtSpecCtrl          = (pBaseFeat->fVmxVirtSpecCtrl          & EmuFeat.fVmxVirtSpecCtrl         );
    19581994    pGuestFeat->fVmxEntryLoadDebugCtls    = (pBaseFeat->fVmxEntryLoadDebugCtls    & EmuFeat.fVmxEntryLoadDebugCtls   );
    19591995    pGuestFeat->fVmxIa32eModeGuest        = (pBaseFeat->fVmxIa32eModeGuest        & EmuFeat.fVmxIa32eModeGuest       );
     
    20242060
    20252061    if (!pGuestFeat->fVmxTertiaryExecCtls)
     2062    {
    20262063        Assert(!pGuestFeat->fVmxLoadIwKeyExit);
     2064        Assert(!pGuestFeat->fVmxHlat);
     2065        Assert(!pGuestFeat->fVmxEptPagingWrite);
     2066        Assert(!pGuestFeat->fVmxGstPagingVerify);
     2067        Assert(!pGuestFeat->fVmxIpiVirt);
     2068        Assert(!pGuestFeat->fVmxVirtSpecCtrl);
     2069    }
    20272070
    20282071    /*
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