VirtualBox

Changeset 78524 in vbox


Ignore:
Timestamp:
May 15, 2019 4:55:54 AM (5 years ago)
Author:
vboxsync
Message:

VMM/HM: Nested VMX: bugref:9180 Prep for invvpid support.

Location:
trunk
Files:
2 edited

Legend:

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

    r78481 r78524  
    855855    } StrIo;
    856856
     857    /** INVEPT, INVPCID, INVVPID information. */
    857858    struct
    858859    {
     
    973974    } RdrandRdseed;
    974975
     976    /** VMREAD, VMWRITE information. */
    975977    struct
    976978    {
     
    14771479
    14781480/** @name VMX MSR - Miscellaneous data.
    1479  * Bit fields for MSR_IA32_VMX_MISC.
    14801481 * @{
    14811482 */
     
    14941495/** Maximum CR3-target count supported by the CPU. */
    14951496#define VMX_MISC_CR3_TARGET_COUNT(a_MiscMsr)                    (((a) >> 16) & 0xff)
     1497
     1498/** Bit fields for MSR_IA32_VMX_MISC.  */
    14961499/** Relationship between the preemption timer and tsc. */
    14971500#define VMX_BF_MISC_PREEMPT_TIMER_TSC_SHIFT                     0
     
    15771580 * @{
    15781581 */
     1582/** Supports execute-only translations by EPT. */
    15791583#define MSR_IA32_VMX_EPT_VPID_CAP_RWX_X_ONLY                    RT_BIT_64(0)
     1584/** Supports page-walk length of 4. */
    15801585#define MSR_IA32_VMX_EPT_VPID_CAP_PAGE_WALK_LENGTH_4            RT_BIT_64(6)
     1586/** Supports EPT paging-structure memory type to be uncacheable. */
    15811587#define MSR_IA32_VMX_EPT_VPID_CAP_EMT_UC                        RT_BIT_64(8)
     1588/** Supports EPT paging structure memory type to be write-back. */
    15821589#define MSR_IA32_VMX_EPT_VPID_CAP_EMT_WB                        RT_BIT_64(14)
     1590/** Supports EPT PDE to map a 2 MB page. */
    15831591#define MSR_IA32_VMX_EPT_VPID_CAP_PDE_2M                        RT_BIT_64(16)
     1592/** Supports EPT PDPTE to map a 1 GB page. */
    15841593#define MSR_IA32_VMX_EPT_VPID_CAP_PDPTE_1G                      RT_BIT_64(17)
     1594/** Supports INVEPT instruction. */
    15851595#define MSR_IA32_VMX_EPT_VPID_CAP_INVEPT                        RT_BIT_64(20)
     1596/** Supports accessed and dirty flags for EPT. */
    15861597#define MSR_IA32_VMX_EPT_VPID_CAP_EPT_ACCESS_DIRTY              RT_BIT_64(21)
     1598/** Supports single-context INVEPT type. */
    15871599#define MSR_IA32_VMX_EPT_VPID_CAP_INVEPT_SINGLE_CONTEXT         RT_BIT_64(25)
     1600/** Supports all-context INVEPT type. */
    15881601#define MSR_IA32_VMX_EPT_VPID_CAP_INVEPT_ALL_CONTEXTS           RT_BIT_64(26)
     1602/** Supports INVVPID instruction. */
    15891603#define MSR_IA32_VMX_EPT_VPID_CAP_INVVPID                       RT_BIT_64(32)
     1604/** Supports individual-address INVVPID type. */
    15901605#define MSR_IA32_VMX_EPT_VPID_CAP_INVVPID_INDIV_ADDR            RT_BIT_64(40)
     1606/** Supports single-context INVVPID type. */
    15911607#define MSR_IA32_VMX_EPT_VPID_CAP_INVVPID_SINGLE_CONTEXT        RT_BIT_64(41)
     1608/** Supports all-context INVVPID type. */
    15921609#define MSR_IA32_VMX_EPT_VPID_CAP_INVVPID_ALL_CONTEXTS          RT_BIT_64(42)
     1610/** Supports singe-context-retaining-globals INVVPID type. */
    15931611#define MSR_IA32_VMX_EPT_VPID_CAP_INVVPID_SINGLE_CONTEXT_RETAIN_GLOBALS  RT_BIT_64(43)
     1612
     1613/** Bit fields for MSR_IA32_VMX_EPT_VPID_CAP. */
     1614#define VMX_BF_EPT_VPID_CAP_RWX_X_ONLY_SHIFT                    0
     1615#define VMX_BF_EPT_VPID_CAP_RWX_X_ONLY_MASK                     UINT64_C(0x0000000000000001)
     1616#define VMX_BF_EPT_VPID_CAP_RSVD_1_5_SHIFT                      1
     1617#define VMX_BF_EPT_VPID_CAP_RSVD_1_5_MASK                       UINT64_C(0x000000000000003e)
     1618#define VMX_BF_EPT_VPID_CAP_PAGE_WALK_LENGTH_4_SHIFT            6
     1619#define VMX_BF_EPT_VPID_CAP_PAGE_WALK_LENGTH_4_MASK             UINT64_C(0x0000000000000040)
     1620#define VMX_BF_EPT_VPID_CAP_RSVD_7_SHIFT                        7
     1621#define VMX_BF_EPT_VPID_CAP_RSVD_7_MASK                         UINT64_C(0x0000000000000080)
     1622#define VMX_BF_EPT_VPID_CAP_EMT_UC_SHIFT                        8
     1623#define VMX_BF_EPT_VPID_CAP_EMT_UC_MASK                         UINT64_C(0x0000000000000100)
     1624#define VMX_BF_EPT_VPID_CAP_RSVD_9_13_SHIFT                     9
     1625#define VMX_BF_EPT_VPID_CAP_RSVD_9_13_MASK                      UINT64_C(0x0000000000003e00)
     1626#define VMX_BF_EPT_VPID_CAP_EMT_WB_SHIFT                        14
     1627#define VMX_BF_EPT_VPID_CAP_EMT_WB_MASK                         UINT64_C(0x0000000000004000)
     1628#define VMX_BF_EPT_VPID_CAP_RSVD_15_SHIFT                       15
     1629#define VMX_BF_EPT_VPID_CAP_RSVD_15_MASK                        UINT64_C(0x0000000000008000)
     1630#define VMX_BF_EPT_VPID_CAP_PDE_2M_SHIFT                        16
     1631#define VMX_BF_EPT_VPID_CAP_PDE_2M_MASK                         UINT64_C(0x0000000000010000)
     1632#define VMX_BF_EPT_VPID_CAP_PDPTE_1G_SHIFT                      17
     1633#define VMX_BF_EPT_VPID_CAP_PDPTE_1G_MASK                       UINT64_C(0x0000000000020000)
     1634#define VMX_BF_EPT_VPID_CAP_RSVD_18_19_SHIFT                    18
     1635#define VMX_BF_EPT_VPID_CAP_RSVD_18_19_MASK                     UINT64_C(0x00000000000c0000)
     1636#define VMX_BF_EPT_VPID_CAP_INVEPT_SHIFT                        20
     1637#define VMX_BF_EPT_VPID_CAP_INVEPT_MASK                         UINT64_C(0x0000000000100000)
     1638#define VMX_BF_EPT_VPID_CAP_EPT_ACCESS_DIRTY_SHIFT              21
     1639#define VMX_BF_EPT_VPID_CAP_EPT_ACCESS_DIRTY_MASK               UINT64_C(0x0000000000200000)
     1640#define VMX_BF_EPT_VPID_CAP_RSVD_22_24_SHIFT                    22
     1641#define VMX_BF_EPT_VPID_CAP_RSVD_22_24_MASK                     UINT64_C(0x0000000001c00000)
     1642#define VMX_BF_EPT_VPID_CAP_INVEPT_SINGLE_CTX_SHIFT             25
     1643#define VMX_BF_EPT_VPID_CAP_INVEPT_SINGLE_CTX_MASK              UINT64_C(0x0000000002000000)
     1644#define VMX_BF_EPT_VPID_CAP_INVEPT_ALL_CTX_SHIFT                26
     1645#define VMX_BF_EPT_VPID_CAP_INVEPT_ALL_CTX_MASK                 UINT64_C(0x0000000004000000)
     1646#define VMX_BF_EPT_VPID_CAP_RSVD_27_31_SHIFT                    27
     1647#define VMX_BF_EPT_VPID_CAP_RSVD_27_31_MASK                     UINT64_C(0x00000000f8000000)
     1648#define VMX_BF_EPT_VPID_CAP_INVVPID_SHIFT                       32
     1649#define VMX_BF_EPT_VPID_CAP_INVVPID_MASK                        UINT64_C(0x0000000100000000)
     1650#define VMX_BF_EPT_VPID_CAP_RSVD_33_39_SHIFT                    33
     1651#define VMX_BF_EPT_VPID_CAP_RSVD_33_39_MASK                     UINT64_C(0x000000fe00000000)
     1652#define VMX_BF_EPT_VPID_CAP_INVVPID_INDIV_ADDR_SHIFT            40
     1653#define VMX_BF_EPT_VPID_CAP_INVVPID_INDIV_ADDR_MASK             UINT64_C(0x0000010000000000)
     1654#define VMX_BF_EPT_VPID_CAP_INVVPID_SINGLE_CTX_SHIFT            41
     1655#define VMX_BF_EPT_VPID_CAP_INVVPID_SINGLE_CTX_MASK             UINT64_C(0x0000020000000000)
     1656#define VMX_BF_EPT_VPID_CAP_INVVPID_ALL_CTX_SHIFT               42
     1657#define VMX_BF_EPT_VPID_CAP_INVVPID_ALL_CTX_MASK                UINT64_C(0x0000040000000000)
     1658#define VMX_BF_EPT_VPID_CAP_INVVPID_SINGLE_CTX_RETAIN_GLOBALS_SHIFT 43
     1659#define VMX_BF_EPT_VPID_CAP_INVVPID_SINGLE_CTX_RETAIN_GLOBALS_MASK  UINT64_C(0x0000080000000000)
     1660#define VMX_BF_EPT_VPID_CAP_RSVD_44_63_SHIFT                    44
     1661#define VMX_BF_EPT_VPID_CAP_RSVD_44_63_MASK                     UINT64_C(0xfffff00000000000)
     1662RT_BF_ASSERT_COMPILE_CHECKS(VMX_BF_EPT_VPID_CAP_, UINT64_C(0), UINT64_MAX,
     1663                            (RWX_X_ONLY, RSVD_1_5, PAGE_WALK_LENGTH_4, RSVD_7, EMT_UC, RSVD_9_13, EMT_WB, RSVD_15, PDE_2M,
     1664                             PDPTE_1G, RSVD_18_19, INVEPT, EPT_ACCESS_DIRTY, RSVD_22_24, INVEPT_SINGLE_CTX,
     1665                             INVEPT_ALL_CTX, RSVD_27_31, INVVPID, RSVD_33_39, INVVPID_INDIV_ADDR, INVVPID_SINGLE_CTX,
     1666                             INVVPID_ALL_CTX, INVVPID_SINGLE_CTX_RETAIN_GLOBALS, RSVD_44_63));
    15941667/** @} */
    15951668
     
    38813954    kVmxVDiag_Vmread_RealOrV86Mode,
    38823955    kVmxVDiag_Vmread_VmxRoot,
     3956    /* INVVPID. */
     3957    kVmxVDiag_Invvpid_Cpl,
     3958    kVmxVDiag_Invvpid_DescRsvd,
     3959    kVmxVDiag_Invvpid_LongModeCS,
     3960    kVmxVDiag_Invvpid_RealOrV86Mode,
     3961    kVmxVDiag_Invvpid_TypeInvalid,
     3962    kVmxVDiag_Invvpid_Type0InvalidAddr,
     3963    kVmxVDiag_Invvpid_Type0InvalidVpid,
     3964    kVmxVDiag_Invvpid_Type1InvalidVpid,
     3965    kVmxVDiag_Invvpid_Type3InvalidVpid,
     3966    kVmxVDiag_Invvpid_VmxRoot,
    38833967    /* VMLAUNCH/VMRESUME. */
    38843968    kVmxVDiag_Vmentry_AddrApicAccess,
  • trunk/src/VBox/VMM/VMMAll/HMVMXAll.cpp

    r78481 r78524  
    131131    VMXV_DIAG_DESC(kVmxVDiag_Vmread_RealOrV86Mode             , "RealOrV86Mode"             ),
    132132    VMXV_DIAG_DESC(kVmxVDiag_Vmread_VmxRoot                   , "VmxRoot"                   ),
     133    /* INVVPID. */
     134    VMXV_DIAG_DESC(kVmxVDiag_Invvpid_Cpl                      , "Cpl"                       ),
     135    VMXV_DIAG_DESC(kVmxVDiag_Invvpid_DescRsvd                 , "DescRsvd"                  ),
     136    VMXV_DIAG_DESC(kVmxVDiag_Invvpid_LongModeCS               , "LongModeCS"                ),
     137    VMXV_DIAG_DESC(kVmxVDiag_Invvpid_RealOrV86Mode            , "RealOrV86Mode"             ),
     138    VMXV_DIAG_DESC(kVmxVDiag_Invvpid_TypeInvalid              , "TypeInvalid"               ),
     139    VMXV_DIAG_DESC(kVmxVDiag_Invvpid_Type0InvalidAddr         , "Type0InvalidAddr"          ),
     140    VMXV_DIAG_DESC(kVmxVDiag_Invvpid_Type0InvalidVpid         , "Type0InvalidVpid"          ),
     141    VMXV_DIAG_DESC(kVmxVDiag_Invvpid_Type1InvalidVpid         , "Type1InvalidVpid"          ),
     142    VMXV_DIAG_DESC(kVmxVDiag_Invvpid_Type3InvalidVpid         , "Type3InvalidVpid"          ),
     143    VMXV_DIAG_DESC(kVmxVDiag_Invvpid_VmxRoot                  , "VmxRoot"                   ),
    133144    /* VMLAUNCH/VMRESUME. */
    134145    VMXV_DIAG_DESC(kVmxVDiag_Vmentry_AddrApicAccess           , "AddrApicAccess"            ),
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