VirtualBox

Changeset 73870 in vbox for trunk


Ignore:
Timestamp:
Aug 24, 2018 9:39:44 AM (6 years ago)
Author:
vboxsync
Message:

VMM: Nested VMX: Added VMX CPUID features for RDRAND, RDSEED and PML. Fixed incorrect VMCS field validation for guest-interrupt status.

Location:
trunk
Files:
4 edited

Legend:

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

    r73795 r73870  
    12071207    /** VMX: Supports Pause-loop exiting. */
    12081208    uint32_t        fVmxPauseLoopExit : 1;
     1209    /** VMX: Supports RDRAND exiting. */
     1210    uint32_t        fVmxRdrandExit : 1;
    12091211    /** VMX: Supports INVPCID. */
    12101212    uint32_t        fVmxInvpcid : 1;
     
    12131215    /** VMX: Supports VMCS shadowing. */
    12141216    uint32_t        fVmxVmcsShadowing : 1;
     1217    /** VMX: Supports RDSEED exiting. */
     1218    uint32_t        fVmxRdseedExit : 1;
     1219    /** VMX: Supports PML. */
     1220    uint32_t        fVmxPml : 1;
    12151221    /** VMX: Supports EPT-violations \#VE. */
    12161222    uint32_t        fVmxEptXcptVe : 1;
     
    12661272
    12671273    /** VMX: Padding / reserved for future features. */
    1268     uint32_t        fVmxPadding0 : 5;
     1274    uint32_t        fVmxPadding0 : 2;
    12691275    uint32_t        fVmxPadding1;
    12701276} CPUMFEATURES;
  • trunk/src/VBox/VMM/VMMAll/CPUMAllMsrs.cpp

    r73795 r73870  
    15721572                                 | (pGuestFeatures->fVmxVirtIntDelivery   << VMX_BF_PROC_CTLS2_VIRT_INT_DELIVERY_SHIFT )
    15731573                                 | (pGuestFeatures->fVmxPauseLoopExit     << VMX_BF_PROC_CTLS2_PAUSE_LOOP_EXIT_SHIFT   )
     1574                                 | (pGuestFeatures->fVmxRdrandExit        << VMX_BF_PROC_CTLS2_RDRAND_EXIT_SHIFT       )
    15741575                                 | (pGuestFeatures->fVmxInvpcid           << VMX_BF_PROC_CTLS2_INVPCID_SHIFT           )
    15751576                                 | (pGuestFeatures->fVmxVmFunc            << VMX_BF_PROC_CTLS2_VMFUNC_SHIFT            )
    15761577                                 | (pGuestFeatures->fVmxVmcsShadowing     << VMX_BF_PROC_CTLS2_VMCS_SHADOWING_SHIFT    )
     1578                                 | (pGuestFeatures->fVmxRdseedExit        << VMX_BF_PROC_CTLS2_RDSEED_EXIT_SHIFT       )
     1579                                 | (pGuestFeatures->fVmxPml               << VMX_BF_PROC_CTLS2_PML_SHIFT               )
    15771580                                 | (pGuestFeatures->fVmxEptXcptVe         << VMX_BF_PROC_CTLS2_EPT_VE_SHIFT            )
    15781581                                 | (pGuestFeatures->fVmxXsavesXrstors     << VMX_BF_PROC_CTLS2_XSAVES_XRSTORS_SHIFT    )
  • trunk/src/VBox/VMM/VMMAll/IEMAllCImplVmxInstr.cpp.h

    r73869 r73870  
    393393        case VMX_VMCS16_GUEST_LDTR_SEL:
    394394        case VMX_VMCS16_GUEST_TR_SEL:
    395         case VMX_VMCS16_GUEST_INTR_STATUS:                return true;
    396         case VMX_VMCS16_GUEST_PML_INDEX:                  return false;
     395        case VMX_VMCS16_GUEST_INTR_STATUS:                return pFeat->fVmxVirtIntDelivery;
     396        case VMX_VMCS16_GUEST_PML_INDEX:                  return pFeat->fVmxPml;
    397397
    398398        /* Host-state fields. */
     
    424424        case VMX_VMCS64_CTRL_EXEC_VMCS_PTR_HIGH:          return true;
    425425        case VMX_VMCS64_CTRL_EXEC_PML_ADDR_FULL:
    426         case VMX_VMCS64_CTRL_EXEC_PML_ADDR_HIGH:          return false;
     426        case VMX_VMCS64_CTRL_EXEC_PML_ADDR_HIGH:          return pFeat->fVmxPml;
    427427        case VMX_VMCS64_CTRL_TSC_OFFSET_FULL:
    428428        case VMX_VMCS64_CTRL_TSC_OFFSET_HIGH:             return true;
  • trunk/src/VBox/VMM/VMMR3/CPUM.cpp

    r73795 r73870  
    10231023        VMXFEATDUMP("VirtIntDelivery - Virtual-interrupt delivery           ", fVmxVirtIntDelivery);
    10241024        VMXFEATDUMP("PauseLoopExit - PAUSE-loop exiting                     ", fVmxPauseLoopExit);
     1025        VMXFEATDUMP("RdrandExit - RDRAND exiting                            ", fVmxRdrandExit);
    10251026        VMXFEATDUMP("Invpcid - Enable INVPCID                               ", fVmxInvpcid);
    10261027        VMXFEATDUMP("VmFuncs - Enable VM Functions                          ", fVmxVmFunc);
    10271028        VMXFEATDUMP("VmcsShadowing - VMCS shadowing                         ", fVmxVmcsShadowing);
     1029        VMXFEATDUMP("RdseedExiting - RDSEED exiting                         ", fVmxRdseedExit);
     1030        VMXFEATDUMP("PML - Supports Page-Modification Log (PML)             ", fVmxPml);
    10281031        VMXFEATDUMP("EptVe - EPT violations can cause #VE                   ", fVmxEptXcptVe);
    10291032        VMXFEATDUMP("XsavesXRstors - Enable XSAVES/XRSTORS                  ", fVmxXsavesXrstors);
     
    11241127            pHostFeat->fVmxVirtIntDelivery   = RT_BOOL(fProcCtls2 & VMX_PROC_CTLS2_VIRT_INT_DELIVERY);
    11251128            pHostFeat->fVmxPauseLoopExit     = RT_BOOL(fProcCtls2 & VMX_PROC_CTLS2_PAUSE_LOOP_EXIT);
     1129            pHostFeat->fVmxRdrandExit        = RT_BOOL(fProcCtls2 & VMX_PROC_CTLS2_RDRAND_EXIT);
    11261130            pHostFeat->fVmxInvpcid           = RT_BOOL(fProcCtls2 & VMX_PROC_CTLS2_INVPCID);
    11271131            pHostFeat->fVmxVmFunc            = RT_BOOL(fProcCtls2 & VMX_PROC_CTLS2_VMFUNC);
    11281132            pHostFeat->fVmxVmcsShadowing     = RT_BOOL(fProcCtls2 & VMX_PROC_CTLS2_VMCS_SHADOWING);
     1133            pHostFeat->fVmxRdseedExit        = RT_BOOL(fProcCtls2 & VMX_PROC_CTLS2_RDSEED_EXIT);
     1134            pHostFeat->fVmxPml               = RT_BOOL(fProcCtls2 & VMX_PROC_CTLS2_PML);
    11291135            pHostFeat->fVmxEptXcptVe         = RT_BOOL(fProcCtls2 & VMX_PROC_CTLS2_EPT_VE);
    11301136            pHostFeat->fVmxXsavesXrstors     = RT_BOOL(fProcCtls2 & VMX_PROC_CTLS2_XSAVES_XRSTORS);
     
    12031209    EmuFeat.fVmxVirtIntDelivery       = 0;
    12041210    EmuFeat.fVmxPauseLoopExit         = 0;
     1211    EmuFeat.fVmxRdrandExit            = 0;
    12051212    EmuFeat.fVmxInvpcid               = 1;
    12061213    EmuFeat.fVmxVmFunc                = 0;
    12071214    EmuFeat.fVmxVmcsShadowing         = 0;
     1215    EmuFeat.fVmxRdseedExit            = 0;
     1216    EmuFeat.fVmxPml                   = 0;
    12081217    EmuFeat.fVmxEptXcptVe             = 0;
    12091218    EmuFeat.fVmxXsavesXrstors         = 0;
     
    12741283    pGuestFeat->fVmxVirtIntDelivery       = (pBaseFeat->fVmxVirtIntDelivery       & EmuFeat.fVmxVirtIntDelivery      );
    12751284    pGuestFeat->fVmxPauseLoopExit         = (pBaseFeat->fVmxPauseLoopExit         & EmuFeat.fVmxPauseLoopExit        );
     1285    pGuestFeat->fVmxRdrandExit            = (pBaseFeat->fVmxRdrandExit            & EmuFeat.fVmxRdrandExit           );
    12761286    pGuestFeat->fVmxInvpcid               = (pBaseFeat->fVmxInvpcid               & EmuFeat.fVmxInvpcid              );
    12771287    pGuestFeat->fVmxVmFunc                = (pBaseFeat->fVmxVmFunc                & EmuFeat.fVmxVmFunc               );
    12781288    pGuestFeat->fVmxVmcsShadowing         = (pBaseFeat->fVmxVmcsShadowing         & EmuFeat.fVmxVmcsShadowing        );
     1289    pGuestFeat->fVmxRdseedExit            = (pBaseFeat->fVmxRdseedExit            & EmuFeat.fVmxRdseedExit           );
     1290    pGuestFeat->fVmxPml                   = (pBaseFeat->fVmxPml                   & EmuFeat.fVmxPml                  );
    12791291    pGuestFeat->fVmxEptXcptVe             = (pBaseFeat->fVmxEptXcptVe             & EmuFeat.fVmxEptXcptVe            );
    12801292    pGuestFeat->fVmxXsavesXrstors         = (pBaseFeat->fVmxXsavesXrstors         & EmuFeat.fVmxXsavesXrstors        );
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