VirtualBox

Changeset 97262 in vbox for trunk


Ignore:
Timestamp:
Oct 21, 2022 8:10:15 AM (2 years ago)
Author:
vboxsync
Message:

VMM: Nested VMX: bugref:10092 Added fetching VM-exit secondary MSR from the support driver. Updated the virtual VMCS with latest VMCS fields (HLAT prefix size, HLAT ptr, secondary VM-exit controls and PCONFIG-exiting bitmap).

Location:
trunk
Files:
12 edited

Legend:

Unmodified
Added
Removed
  • trunk/include/VBox/sup.h

    r96407 r97262  
    178178            uint64_t        u64EptVpidCaps;
    179179            uint64_t        u64ProcCtls3;
    180             uint64_t        au64Reserved[8];
     180            uint64_t        u64ExitCtls2;
     181            uint64_t        au64Reserved[7];
    181182        } vmx;
    182183        struct
  • trunk/include/VBox/vmm/cpum.h

    r97231 r97262  
    14011401    /** VMX: Supports save VMX preemption timer on VM-exit. */
    14021402    uint32_t        fVmxSavePreemptTimer : 1;
     1403    /** VMX: Supports secondary VM-exit controls. */
     1404    uint32_t        fVmxExitCtls2 : 1;
    14031405    /** @} */
    14041406
     
    14181420
    14191421    /** VMX: Padding / reserved for future features. */
    1420     uint32_t        fVmxPadding0 : 17;
     1422    uint32_t        fVmxPadding0 : 16;
    14211423    /** VMX: Padding / reserved for future, making it a total of 128 bits.  */
    14221424    uint32_t        fVmxPadding1;
  • trunk/include/VBox/vmm/hm_vmx.h

    r97040 r97262  
    13601360    /** Tertiary processor-based VM-execution controls. */
    13611361    uint64_t        u64ProcCtls3;
     1362    /** Secondary VM-exit controls. */
     1363    uint64_t        u64ExitCtls2;
    13621364    /** Reserved for future. */
    1363     uint64_t        a_u64Reserved[9];
     1365    uint64_t        a_u64Reserved[8];
    13641366} VMXMSRS;
    13651367AssertCompileSizeAlignment(VMXMSRS, 8);
     
    19271929#define VMX_VMCS16_POSTED_INT_NOTIFY_VECTOR                     0x0002
    19281930#define VMX_VMCS16_EPTP_INDEX                                   0x0004
     1931#define VMX_VMCS16_HLAT_PREFIX_SIZE                             0x0006
    19291932
    19301933/** 16-bit guest-state fields.  */
     
    20062009#define VMX_VMCS64_CTRL_ENCLV_EXITING_BITMAP_FULL               0x2036
    20072010#define VMX_VMCS64_CTRL_ENCLV_EXITING_BITMAP_HIGH               0x2037
     2011#define VMX_VMCS64_CTRL_PCONFIG_EXITING_BITMAP_FULL             0x203e
     2012#define VMX_VMCS64_CTRL_PCONFIG_EXITING_BITMAP_HIGH             0x203f
     2013#define VMX_VMCS64_CTRL_HLAT_PTR_FULL                           0x2040
     2014#define VMX_VMCS64_CTRL_HLAT_PTR_HIGH                           0x2041
     2015#define VMX_VMCS64_CTRL_EXIT2_FULL                              0x2044
     2016#define VMX_VMCS64_CTRL_EXIT2_HIGH                              0x2045
    20082017
    20092018/** 64-bit read-only data fields.  */
     
    27252734/** Whether the host IA32_PKRS MSR is loaded on VM-exit. */
    27262735#define VMX_EXIT_CTLS_LOAD_PKRS_MSR                             RT_BIT(29)
     2736/** Whether the host IA32_PERF_GLOBAL_CTRL MSR is saved on VM-exit. */
     2737#define VMX_EXIT_CTLS_SAVE_PERF_MSR                             RT_BIT(30)
     2738/** Whether secondary VM-exit controls are used. */
     2739#define VMX_EXIT_CTLS_USE_SECONDARY_CTLS                        RT_BIT(31)
    27272740/** Default1 class when true-capability MSRs are not supported. */
    27282741#define VMX_EXIT_CTLS_DEFAULT1                                  UINT32_C(0x00036dff)
     
    27702783#define VMX_BF_EXIT_CTLS_LOAD_PKRS_MSR_SHIFT                    29
    27712784#define VMX_BF_EXIT_CTLS_LOAD_PKRS_MSR_MASK                     UINT32_C(0x20000000)
    2772 #define VMX_BF_EXIT_CTLS_RSVD_30_31_SHIFT                       30
    2773 #define VMX_BF_EXIT_CTLS_RSVD_30_31_MASK                        UINT32_C(0xc0000000)
     2785#define VMX_BF_EXIT_CTLS_SAVE_PERF_MSR_SHIFT                    30
     2786#define VMX_BF_EXIT_CTLS_SAVE_PERF_MSR_MASK                     UINT32_C(0x40000000)
     2787#define VMX_BF_EXIT_CTLS_USE_SECONDARY_CTLS_SHIFT               31
     2788#define VMX_BF_EXIT_CTLS_USE_SECONDARY_CTLS_MASK                UINT32_C(0x80000000)
    27742789RT_BF_ASSERT_COMPILE_CHECKS(VMX_BF_EXIT_CTLS_, UINT32_C(0), UINT32_MAX,
    27752790                            (RSVD_0_1, SAVE_DEBUG, RSVD_3_8, HOST_ADDR_SPACE_SIZE, RSVD_10_11, LOAD_PERF_MSR, RSVD_13_14,
    27762791                             ACK_EXT_INT, RSVD_16_17, SAVE_PAT_MSR, LOAD_PAT_MSR, SAVE_EFER_MSR, LOAD_EFER_MSR,
    27772792                             SAVE_PREEMPT_TIMER, CLEAR_BNDCFGS_MSR, CONCEAL_VMX_FROM_PT, CLEAR_RTIT_CTL_MSR, RSVD_26_27,
    2778                              LOAD_CET, LOAD_PKRS_MSR, RSVD_30_31));
     2793                             LOAD_CET, LOAD_PKRS_MSR, SAVE_PERF_MSR, USE_SECONDARY_CTLS));
    27792794/** @} */
    27802795
     
    38083823
    38093824/** The highest index value used for supported virtual VMCS field encoding. */
    3810 #define VMX_V_VMCS_MAX_INDEX                                    RT_BF_GET(VMX_VMCS64_CTRL_ENCLV_EXITING_BITMAP_HIGH, VMX_BF_VMCSFIELD_INDEX)
     3825#define VMX_V_VMCS_MAX_INDEX                                    RT_BF_GET(VMX_VMCS64_CTRL_EXIT2_HIGH, VMX_BF_VMCSFIELD_INDEX)
    38113826
    38123827/**
     
    40354050    uint16_t        u16PostIntNotifyVector;      /**< 0x1b2 - Posted interrupt notify vector. */
    40364051    uint16_t        u16EptpIndex;                /**< 0x1b4 - EPTP index. */
    4037     uint16_t        au16Reserved0[13];           /**< 0x1b6 - Reserved for future. */
     4052    uint16_t        u16HlatPrefixSize;           /**< 0x1b6 - HLAT prefix size. */
     4053    uint16_t        au16Reserved0[12];           /**< 0x1b8 - Reserved for future. */
    40384054
    40394055    /** 32-bit fields. */
     
    40874103    RTUINT64U       u64ProcCtls3;                /**< 0x328 - Tertiary-Processor based VM-execution controls. */
    40884104    RTUINT64U       u64EnclvExitBitmap;          /**< 0x330 - ENCLV-exiting bitmap. */
    4089     RTUINT64U       au64Reserved0[13];           /**< 0x338 - Reserved for future. */
     4105    RTUINT64U       u64PconfigExitBitmap;        /**< 0x338 - PCONFIG-exiting bitmap. */
     4106    RTUINT64U       u64HlatPtr;                  /**< 0x340 - HLAT pointer. */
     4107    RTUINT64U       u64ExitCtls2;                /**< 0x348 - Secondary VM-exit controls. */
     4108    RTUINT64U       au64Reserved0[10];           /**< 0x350 - Reserved for future. */
    40904109
    40914110    /** Natural-width fields. */
  • trunk/src/VBox/HostDrivers/Support/SUPDrv.cpp

    r96811 r97262  
    48554855            if (Msrs.u.vmx.ProcCtls.n.allowed1 & VMX_PROC_CTLS_USE_TERTIARY_CTLS)
    48564856                Msrs.u.vmx.u64ProcCtls3 = ASMRdMsr(MSR_IA32_VMX_PROCBASED_CTLS3);
     4857
     4858            if (Msrs.u.vmx.ExitCtls.n.allowed1 & VMX_EXIT_CTLS_USE_SECONDARY_CTLS)
     4859                Msrs.u.vmx.u64ExitCtls2 = ASMRdMsr(MSR_IA32_VMX_EXIT_CTLS2);
    48574860        }
    48584861        else if (fCaps & SUPVTCAPS_AMD_V)
  • trunk/src/VBox/HostDrivers/Support/SUPDrvIOC.h

    r96811 r97262  
    233233 *          - nothing
    234234 */
    235 #define SUPDRV_IOC_VERSION                              0x00330003
     235#define SUPDRV_IOC_VERSION                              0x00330004
    236236
    237237/** SUP_IOCTL_COOKIE. */
  • trunk/src/VBox/HostDrivers/Support/SUPLib.cpp

    r96811 r97262  
    299299        CookieReq.u.In.u32ReqVersion = SUPDRV_IOC_VERSION;
    300300        const uint32_t uMinVersion = (SUPDRV_IOC_VERSION & 0xffff0000) == 0x00330000
    301                                    ? 0x00330003
     301                                   ? 0x00330004
    302302                                   : SUPDRV_IOC_VERSION & 0xffff0000;
    303303        CookieReq.u.In.u32MinVersion = uMinVersion;
  • trunk/src/VBox/VMM/VMMAll/CPUMAllCpuId.cpp

    r97070 r97262  
    13531353        pFeatures->fVmxExitLoadEferMsr       = RT_BOOL(fExitCtls & VMX_EXIT_CTLS_LOAD_EFER_MSR);
    13541354        pFeatures->fVmxSavePreemptTimer      = RT_BOOL(fExitCtls & VMX_EXIT_CTLS_SAVE_PREEMPT_TIMER);
     1355        pFeatures->fVmxExitCtls2             = RT_BOOL(fExitCtls & VMX_EXIT_CTLS_USE_SECONDARY_CTLS);
    13551356    }
    13561357
  • trunk/src/VBox/VMM/VMMAll/HMAll.cpp

    r96407 r97262  
    849849    pVmxMsrs->u64EptVpidCaps   = pHwvirtMsrs->u.vmx.u64EptVpidCaps;
    850850    pVmxMsrs->u64ProcCtls3     = pHwvirtMsrs->u.vmx.u64ProcCtls3;
     851    pVmxMsrs->u64ExitCtls2     = pHwvirtMsrs->u.vmx.u64ExitCtls2;
    851852}
    852853
  • trunk/src/VBox/VMM/VMMAll/IEMAllCImplVmxInstr.cpp

    r97222 r97262  
    214214        /*     1 */ RT_UOFFSETOF(VMXVVMCS, u16PostIntNotifyVector),
    215215        /*     2 */ RT_UOFFSETOF(VMXVVMCS, u16EptpIndex),
    216         /*  3-10 */ UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX,
    217         /* 11-18 */ UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX,
    218         /* 19-26 */ UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX,
    219         /*    27 */ UINT16_MAX,
     216        /*     3 */ RT_UOFFSETOF(VMXVVMCS, u16HlatPrefixSize),
     217        /*  4-11 */ UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX,
     218        /* 12-19 */ UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX,
     219        /* 20-27 */ UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX,
     220        /* 28-34 */ UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX
    220221    },
    221222    /* VMX_VMCSFIELD_WIDTH_16BIT | VMX_VMCSFIELD_TYPE_VMEXIT_INFO: */
     
    224225        /*  8-15 */ UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX,
    225226        /* 16-23 */ UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX,
    226         /* 24-27 */ UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX
     227        /* 24-31 */ UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX,
     228        /* 32-34 */ UINT16_MAX, UINT16_MAX, UINT16_MAX
    227229    },
    228230    /* VMX_VMCSFIELD_WIDTH_16BIT | VMX_VMCSFIELD_TYPE_GUEST_STATE: */
     
    240242        /* 10-17 */ UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX,
    241243        /* 18-25 */ UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX,
    242         /* 26-27 */ UINT16_MAX, UINT16_MAX
     244        /* 26-33 */ UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX,
     245        /*    34 */ UINT16_MAX
    243246    },
    244247    /* VMX_VMCSFIELD_WIDTH_16BIT | VMX_VMCSFIELD_TYPE_HOST_STATE: */
     
    253256        /*  7-14 */ UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX,
    254257        /* 15-22 */ UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX,
    255         /* 23-27 */ UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX
     258        /* 23-30 */ UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX,
     259        /* 31-34 */ UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX
    256260    },
    257261    /* VMX_VMCSFIELD_WIDTH_64BIT | VMX_VMCSFIELD_TYPE_CONTROL: */
     
    284288        /*    25 */ RT_UOFFSETOF(VMXVVMCS, u64TscMultiplier),
    285289        /*    26 */ RT_UOFFSETOF(VMXVVMCS, u64ProcCtls3),
    286         /*    27 */ RT_UOFFSETOF(VMXVVMCS, u64EnclvExitBitmap)
     290        /*    27 */ RT_UOFFSETOF(VMXVVMCS, u64EnclvExitBitmap),
     291        /*    28 */ UINT16_MAX,
     292        /*    29 */ UINT16_MAX,
     293        /*    30 */ UINT16_MAX,
     294        /*    31 */ RT_UOFFSETOF(VMXVVMCS, u64PconfigExitBitmap),
     295        /*    32 */ RT_UOFFSETOF(VMXVVMCS, u64HlatPtr),
     296        /*    33 */ UINT16_MAX,
     297        /*    34 */ RT_UOFFSETOF(VMXVVMCS, u64ExitCtls2)
    287298    },
    288299    /* VMX_VMCSFIELD_WIDTH_64BIT | VMX_VMCSFIELD_TYPE_VMEXIT_INFO: */
     
    292303        /*  9-16 */ UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX,
    293304        /* 17-24 */ UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX,
    294         /* 25-27 */ UINT16_MAX, UINT16_MAX, UINT16_MAX
     305        /* 25-32 */ UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX,
     306        /* 33-34*/  UINT16_MAX, UINT16_MAX
    295307    },
    296308    /* VMX_VMCSFIELD_WIDTH_64BIT | VMX_VMCSFIELD_TYPE_GUEST_STATE: */
     
    310322        /*    12 */ RT_UOFFSETOF(VMXVVMCS, u64GuestPkrsMsr),
    311323        /* 13-20 */ UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX,
    312         /* 21-27 */ UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX
     324        /* 21-28 */ UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX,
     325        /* 29-34 */ UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX
    313326    },
    314327    /* VMX_VMCSFIELD_WIDTH_64BIT | VMX_VMCSFIELD_TYPE_HOST_STATE: */
     
    320333        /*  4-11 */ UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX,
    321334        /* 12-19 */ UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX,
    322         /* 20-27 */ UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX
     335        /* 20-27 */ UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX,
     336        /* 28-34 */ UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX
    323337    },
    324338    /* VMX_VMCSFIELD_WIDTH_32BIT | VMX_VMCSFIELD_TYPE_CONTROL: */
     
    343357        /*    17 */ RT_UOFFSETOF(VMXVVMCS, u32PleWindow),
    344358        /* 18-25 */ UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX,
    345         /* 26-27 */ UINT16_MAX, UINT16_MAX
     359        /* 26-33 */ UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX,
     360        /*    34 */ UINT16_MAX
    346361    },
    347362    /* VMX_VMCSFIELD_WIDTH_32BIT | VMX_VMCSFIELD_TYPE_VMEXIT_INFO: */
     
    357372        /*  8-15 */ UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX,
    358373        /* 16-23 */ UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX,
    359         /* 24-27 */ UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX
     374        /* 24-31 */ UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX,
     375        /* 32-34 */ UINT16_MAX, UINT16_MAX, UINT16_MAX
    360376    },
    361377    /* VMX_VMCSFIELD_WIDTH_32BIT | VMX_VMCSFIELD_TYPE_GUEST_STATE: */
     
    385401        /*    22 */ UINT16_MAX,
    386402        /*    23 */ RT_UOFFSETOF(VMXVVMCS, u32PreemptTimer),
    387         /* 24-27 */ UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX
     403        /* 24-31 */ UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX,
     404        /* 32-34 */ UINT16_MAX, UINT16_MAX, UINT16_MAX
    388405    },
    389406    /* VMX_VMCSFIELD_WIDTH_32BIT | VMX_VMCSFIELD_TYPE_HOST_STATE: */
     
    393410        /*  9-16 */ UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX,
    394411        /* 17-24 */ UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX,
    395         /* 25-27 */ UINT16_MAX, UINT16_MAX, UINT16_MAX
     412        /* 25-32 */ UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX,
     413        /* 33-34 */ UINT16_MAX, UINT16_MAX
    396414    },
    397415    /* VMX_VMCSFIELD_WIDTH_NATURAL | VMX_VMCSFIELD_TYPE_CONTROL: */
     
    407425        /*  8-15 */ UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX,
    408426        /* 16-23 */ UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX,
    409         /* 24-27 */ UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX
     427        /* 24-27 */ UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX,
     428        /* 32-34 */ UINT16_MAX, UINT16_MAX, UINT16_MAX
    410429    },
    411430    /* VMX_VMCSFIELD_WIDTH_NATURAL | VMX_VMCSFIELD_TYPE_VMEXIT_INFO: */
     
    419438        /*  6-13 */ UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX,
    420439        /* 14-21 */ UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX,
    421         /* 22-27 */ UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX
     440        /* 22-29 */ UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX,
     441        /* 30-34 */ UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX
    422442    },
    423443    /* VMX_VMCSFIELD_WIDTH_NATURAL | VMX_VMCSFIELD_TYPE_GUEST_STATE: */
     
    446466        /*    21 */ RT_UOFFSETOF(VMXVVMCS, u64GuestSsp),
    447467        /*    22 */ RT_UOFFSETOF(VMXVVMCS, u64GuestIntrSspTableAddrMsr),
    448         /* 23-27 */ UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX
     468        /* 23-27 */ UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX,
     469        /* 31-34 */ UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX
    449470    },
    450471    /* VMX_VMCSFIELD_WIDTH_NATURAL | VMX_VMCSFIELD_TYPE_HOST_STATE: */
     
    466487        /*    14 */ RT_UOFFSETOF(VMXVVMCS, u64HostIntrSspTableAddrMsr),
    467488        /* 15-22 */ UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX,
    468         /* 23-27 */ UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX
     489        /* 23-30 */ UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX,
     490        /* 31-34 */ UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX
    469491    }
    470492};
  • trunk/src/VBox/VMM/VMMAll/VMXAllTemplate.cpp.h

    r97248 r97262  
    328328    VMX_VMCS16_POSTED_INT_NOTIFY_VECTOR,
    329329    VMX_VMCS16_EPTP_INDEX,
     330    VMX_VMCS16_HLAT_PREFIX_SIZE,
    330331
    331332    /* 16-bit guest-state fields. */
     
    407408    VMX_VMCS64_CTRL_ENCLV_EXITING_BITMAP_FULL,
    408409    VMX_VMCS64_CTRL_ENCLV_EXITING_BITMAP_HIGH,
     410    VMX_VMCS64_CTRL_PCONFIG_EXITING_BITMAP_FULL,
     411    VMX_VMCS64_CTRL_PCONFIG_EXITING_BITMAP_HIGH,
     412    VMX_VMCS64_CTRL_HLAT_PTR_FULL,
     413    VMX_VMCS64_CTRL_HLAT_PTR_HIGH,
     414    VMX_VMCS64_CTRL_EXIT2_FULL,
     415    VMX_VMCS64_CTRL_EXIT2_HIGH,
    409416
    410417    /* 64-bit read-only data fields. */
  • trunk/src/VBox/VMM/VMMR3/CPUM.cpp

    r97231 r97262  
    386386    SSMFIELD_ENTRY(       VMXVVMCS, u16PostIntNotifyVector),
    387387    SSMFIELD_ENTRY(       VMXVVMCS, u16EptpIndex),
     388    SSMFIELD_ENTRY_VER(   VMXVVMCS, u16HlatPrefixSize,           CPUM_SAVED_STATE_VERSION_HWVIRT_VMX_3),
    388389    SSMFIELD_ENTRY_IGNORE(VMXVVMCS, au16Reserved0),
    389390
     
    436437    SSMFIELD_ENTRY_VER(   VMXVVMCS, u64ProcCtls3,                CPUM_SAVED_STATE_VERSION_HWVIRT_VMX_2),
    437438    SSMFIELD_ENTRY_VER(   VMXVVMCS, u64EnclvExitBitmap,          CPUM_SAVED_STATE_VERSION_HWVIRT_VMX_2),
     439    SSMFIELD_ENTRY_VER(   VMXVVMCS, u64PconfigExitBitmap,        CPUM_SAVED_STATE_VERSION_HWVIRT_VMX_3),
     440    SSMFIELD_ENTRY_VER(   VMXVVMCS, u64HlatPtr,                  CPUM_SAVED_STATE_VERSION_HWVIRT_VMX_3),
     441    SSMFIELD_ENTRY_VER(   VMXVVMCS, u64ExitCtls2,                CPUM_SAVED_STATE_VERSION_HWVIRT_VMX_3),
    438442    SSMFIELD_ENTRY_IGNORE(VMXVVMCS, au64Reserved0),
    439443
     
    14531457                                 | (pGuestFeatures->fVmxExitSaveEferMsr   << VMX_BF_EXIT_CTLS_SAVE_EFER_MSR_SHIFT       )
    14541458                                 | (pGuestFeatures->fVmxExitLoadEferMsr   << VMX_BF_EXIT_CTLS_LOAD_EFER_MSR_SHIFT       )
    1455                                  | (pGuestFeatures->fVmxSavePreemptTimer  << VMX_BF_EXIT_CTLS_SAVE_PREEMPT_TIMER_SHIFT  );
     1459                                 | (pGuestFeatures->fVmxSavePreemptTimer  << VMX_BF_EXIT_CTLS_SAVE_PREEMPT_TIMER_SHIFT  )
     1460                                 | (pGuestFeatures->fVmxExitCtls2         << VMX_BF_EXIT_CTLS_USE_SECONDARY_CTLS_SHIFT  );
    14561461        /* Set the default1 class bits. See Intel spec. A.4 "VM-exit Controls". */
    14571462        uint32_t const fAllowed0 = VMX_EXIT_CTLS_DEFAULT1;
     
    18411846    EmuFeat.fVmxExitLoadEferMsr       = 1;
    18421847    EmuFeat.fVmxSavePreemptTimer      = 0;  /* Cannot be enabled if VMX-preemption timer is disabled. */
     1848    EmuFeat.fVmxExitCtls2             = 0;
    18431849    EmuFeat.fVmxExitSaveEferLma       = 1;  /* Cannot be disabled if unrestricted guest is enabled. */
    18441850    EmuFeat.fVmxPt                    = 0;
     
    19221928    pGuestFeat->fVmxExitLoadEferMsr       = (pBaseFeat->fVmxExitLoadEferMsr       & EmuFeat.fVmxExitLoadEferMsr      );
    19231929    pGuestFeat->fVmxSavePreemptTimer      = (pBaseFeat->fVmxSavePreemptTimer      & EmuFeat.fVmxSavePreemptTimer     );
     1930    pGuestFeat->fVmxExitCtls2             = (pBaseFeat->fVmxExitCtls2             & EmuFeat.fVmxExitCtls2            );
    19241931    pGuestFeat->fVmxExitSaveEferLma       = (pBaseFeat->fVmxExitSaveEferLma       & EmuFeat.fVmxExitSaveEferLma      );
    19251932    pGuestFeat->fVmxPt                    = (pBaseFeat->fVmxPt                    & EmuFeat.fVmxPt                   );
     
    26112618            SSMR3PutU64(pSSM,      pGstCtx->hwvirt.vmx.Msrs.u64EptVpidCaps);
    26122619            SSMR3PutU64(pSSM,      pGstCtx->hwvirt.vmx.Msrs.u64ProcCtls3);
     2620            SSMR3PutU64(pSSM,      pGstCtx->hwvirt.vmx.Msrs.u64ExitCtls2);
    26132621        }
    26142622        SSMR3PutU32(pSSM, pVCpu->cpum.s.fUseFlags);
     
    26442652     * Validate version.
    26452653     */
    2646     if (    uVersion != CPUM_SAVED_STATE_VERSION_PAE_PDPES
     2654    if (    uVersion != CPUM_SAVED_STATE_VERSION_HWVIRT_VMX_3
     2655        &&  uVersion != CPUM_SAVED_STATE_VERSION_PAE_PDPES
    26472656        &&  uVersion != CPUM_SAVED_STATE_VERSION_HWVIRT_VMX_2
    26482657        &&  uVersion != CPUM_SAVED_STATE_VERSION_HWVIRT_VMX
     
    29082917                        if (uVersion >= CPUM_SAVED_STATE_VERSION_HWVIRT_VMX_2)
    29092918                            SSMR3GetU64(pSSM,  &pGstCtx->hwvirt.vmx.Msrs.u64ProcCtls3);
     2919                        if (uVersion >= CPUM_SAVED_STATE_VERSION_HWVIRT_VMX_3)
     2920                            SSMR3GetU64(pSSM,  &pGstCtx->hwvirt.vmx.Msrs.u64ExitCtls2);
    29102921                    }
    29112922                }
     
    37763787        pHlp->pfnPrintf(pHlp, "  %sPosted intr notify vector  = %#RX16\n",   pszPrefix, pVmcs->u16PostIntNotifyVector);
    37773788        pHlp->pfnPrintf(pHlp, "  %sEPTP index                 = %#RX16\n",   pszPrefix, pVmcs->u16EptpIndex);
     3789        pHlp->pfnPrintf(pHlp, "  %sHLAT prefix size           = %#RX16\n",   pszPrefix, pVmcs->u16HlatPrefixSize);
    37783790
    37793791        /* 32-bit. */
     
    38353847        pHlp->pfnPrintf(pHlp, "  %sTertiary processor ctls    = %#RX64\n",   pszPrefix, pVmcs->u64ProcCtls3.u);
    38363848        pHlp->pfnPrintf(pHlp, "  %sENCLV-exiting bitmap       = %#RX64\n",   pszPrefix, pVmcs->u64EnclvExitBitmap.u);
     3849        pHlp->pfnPrintf(pHlp, "  %sPCONFIG-exiting bitmap     = %#RX64\n",   pszPrefix, pVmcs->u64PconfigExitBitmap.u);
     3850        pHlp->pfnPrintf(pHlp, "  %sHLAT ptr                   = %#RX64\n",   pszPrefix, pVmcs->u64HlatPtr.u);
     3851        pHlp->pfnPrintf(pHlp, "  %sSecondary VM-exit controls = %#RX64\n",   pszPrefix, pVmcs->u64ExitCtls2.u);
    38373852
    38383853        /* Natural width. */
  • trunk/src/VBox/VMM/include/CPUMInternal.h

    r97231 r97262  
    106106 * @{ */
    107107/** The current saved state version. */
    108 #define CPUM_SAVED_STATE_VERSION                CPUM_SAVED_STATE_VERSION_PAE_PDPES
     108#define CPUM_SAVED_STATE_VERSION                CPUM_SAVED_STATE_VERSION_HWVIRT_VMX_3
     109/** The saved state version with more virtual VMCS fields (HLAT prefix size,
     110 *  PCONFIG-exiting bitmap, HLAT ptr, VM-exit ctls2) and a CPUMCTX field (VM-exit
     111 *  ctls2 MSR). */
     112#define CPUM_SAVED_STATE_VERSION_HWVIRT_VMX_3   22
    109113/** The saved state version with PAE PDPEs added. */
    110114#define CPUM_SAVED_STATE_VERSION_PAE_PDPES      21
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