Changeset 91037 in vbox
- Timestamp:
- Aug 31, 2021 4:42:14 PM (3 years ago)
- Location:
- trunk
- Files:
-
- 16 edited
-
include/VBox/sup.h (modified) (1 diff)
-
include/VBox/vmm/cpum.h (modified) (4 diffs)
-
include/VBox/vmm/hm_vmx.h (modified) (12 diffs)
-
include/iprt/x86.h (modified) (2 diffs)
-
src/VBox/HostDrivers/Support/SUPDrv.cpp (modified) (1 diff)
-
src/VBox/HostDrivers/Support/SUPDrvIOC.h (modified) (1 diff)
-
src/VBox/HostDrivers/Support/SUPLib.cpp (modified) (1 diff)
-
src/VBox/VMM/VMMAll/CPUMAllRegs.cpp (modified) (4 diffs)
-
src/VBox/VMM/VMMAll/HMAll.cpp (modified) (1 diff)
-
src/VBox/VMM/VMMAll/HMVMXAll.cpp (modified) (1 diff)
-
src/VBox/VMM/VMMAll/IEMAllCImplVmxInstr.cpp.h (modified) (16 diffs)
-
src/VBox/VMM/VMMR0/HMVMXR0.cpp (modified) (4 diffs)
-
src/VBox/VMM/VMMR3/CPUM.cpp (modified) (22 diffs)
-
src/VBox/VMM/VMMR3/CPUMR3CpuId.cpp (modified) (2 diffs)
-
src/VBox/VMM/VMMR3/HM.cpp (modified) (2 diffs)
-
src/VBox/VMM/include/CPUMInternal.h (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/include/VBox/sup.h
r90943 r91037 165 165 uint64_t u64VmFunc; 166 166 uint64_t u64EptVpidCaps; 167 uint64_t au64Reserved[9]; 167 uint64_t u64ProcCtls3; 168 uint64_t au64Reserved[8]; 168 169 } vmx; 169 170 struct -
trunk/include/VBox/vmm/cpum.h
r89934 r91037 1251 1251 /** VMX: Supports CR3-store exiting. */ 1252 1252 uint32_t fVmxCr3StoreExit : 1; 1253 /** VMX: Supports tertiary processor-based VM-execution controls. */ 1254 uint32_t fVmxTertiaryExecCtls : 1; 1253 1255 /** VMX: Supports CR8-load exiting. */ 1254 1256 uint32_t fVmxCr8LoadExit : 1; … … 1321 1323 /** @} */ 1322 1324 1325 /** @name VMX Tertiary processor-based controls. 1326 * @{ */ 1327 /** VMX: Supports LOADIWKEY exiting. */ 1328 uint32_t fVmxLoadIwKeyExit : 1; 1329 /** @} */ 1330 1323 1331 /** @name VMX VM-entry controls. 1324 1332 * @{ */ … … 1368 1376 1369 1377 /** VMX: Padding / reserved for future features. */ 1370 uint32_t fVmxPadding1 : 1; 1371 uint32_t fVmxPadding2; 1378 uint32_t fVmxPadding1 : 31; 1372 1379 } CPUMFEATURES; 1373 1380 #ifndef VBOX_FOR_DTRACE_LIB … … 2148 2155 2149 2156 /** 2157 * Checks whether one of the given Tertiary Processor-based VM-execution controls 2158 * are set when executing a nested-guest. 2159 * 2160 * @returns @c true if set, @c false otherwise. 2161 * @param pCtx Pointer to the context. 2162 * @param uProcCtls3 The Tertiary Processor-based VM-execution controls to 2163 * check. 2164 * 2165 * @remarks This does not check if all given controls are set if more than one 2166 * control is passed in @a uProcCtls3. 2167 */ 2168 DECLINLINE(bool) CPUMIsGuestVmxProcCtls3Set(PCCPUMCTX pCtx, uint64_t uProcCtls3) 2169 { 2170 Assert(CPUMIsGuestInVmxNonRootMode(pCtx)); 2171 PCVMXVVMCS pVmcs = pCtx->hwvirt.vmx.CTX_SUFF(pVmcs); 2172 Assert(pVmcs); 2173 return RT_BOOL(pVmcs->u64ProcCtls3.u & uProcCtls3); 2174 } 2175 2176 /** 2150 2177 * Checks whether one of the given VM-exit controls are set when executing a 2151 2178 * nested-guest. -
trunk/include/VBox/vmm/hm_vmx.h
r90934 r91037 1235 1235 /** EPT, VPID capabilities. */ 1236 1236 uint64_t u64EptVpidCaps; 1237 /** Tertiary processor-based VM-execution controls. */ 1238 uint64_t u64ProcCtls3; 1237 1239 /** Reserved for future. */ 1238 uint64_t a_u64Reserved[ 9];1240 uint64_t a_u64Reserved[8]; 1239 1241 } VMXMSRS; 1240 1242 AssertCompileSizeAlignment(VMXMSRS, 8); … … 1402 1404 /** TPAUSE. */ 1403 1405 #define VMX_EXIT_TPAUSE 68 1406 /** LOADIWKEY. */ 1407 #define VMX_EXIT_LOADIWKEY 69 1404 1408 /** The maximum VM-exit value (inclusive). */ 1405 #define VMX_EXIT_MAX (VMX_EXIT_ TPAUSE)1409 #define VMX_EXIT_MAX (VMX_EXIT_LOADIWKEY) 1406 1410 /** @} */ 1407 1411 … … 2224 2228 * 'first' VT-x capable CPUs; this actually includes the newest Nehalem CPUs) */ 2225 2229 #define VMX_PROC_CTLS_CR3_STORE_EXIT RT_BIT(16) 2230 /** Whether the secondary processor based VM-execution controls are used. */ 2231 #define VMX_PROC_CTLS_USE_TERTIARY_CTLS RT_BIT(17) 2226 2232 /** VM-exit on CR8 loads. */ 2227 2233 #define VMX_PROC_CTLS_CR8_LOAD_EXIT RT_BIT(19) … … 2279 2285 #define VMX_BF_PROC_CTLS_CR3_STORE_EXIT_SHIFT 16 2280 2286 #define VMX_BF_PROC_CTLS_CR3_STORE_EXIT_MASK UINT32_C(0x00010000) 2281 #define VMX_BF_PROC_CTLS_RSVD_17_18_SHIFT 17 2282 #define VMX_BF_PROC_CTLS_RSVD_17_18_MASK UINT32_C(0x00060000) 2287 #define VMX_BF_PROC_CTLS_USE_TERTIARY_CTLS_SHIFT 17 2288 #define VMX_BF_PROC_CTLS_USE_TERTIARY_CTLS_MASK UINT32_C(0x00020000) 2289 #define VMX_BF_PROC_CTLS_RSVD_18_SHIFT 18 2290 #define VMX_BF_PROC_CTLS_RSVD_18_MASK UINT32_C(0x00040000) 2283 2291 #define VMX_BF_PROC_CTLS_CR8_LOAD_EXIT_SHIFT 19 2284 2292 #define VMX_BF_PROC_CTLS_CR8_LOAD_EXIT_MASK UINT32_C(0x00080000) … … 2309 2317 RT_BF_ASSERT_COMPILE_CHECKS(VMX_BF_PROC_CTLS_, UINT32_C(0), UINT32_MAX, 2310 2318 (RSVD_0_1, INT_WINDOW_EXIT, USE_TSC_OFFSETTING, RSVD_4_6, HLT_EXIT, RSVD_8, INVLPG_EXIT, 2311 MWAIT_EXIT, RDPMC_EXIT, RDTSC_EXIT, RSVD_13_14, CR3_LOAD_EXIT, CR3_STORE_EXIT, RSVD_17_18,2312 CR8_LOAD_EXIT, CR8_STORE_EXIT, USE_TPR_SHADOW, NMI_WINDOW_EXIT, MOV_DR_EXIT, UNCOND_IO_EXIT,2319 MWAIT_EXIT, RDPMC_EXIT, RDTSC_EXIT, RSVD_13_14, CR3_LOAD_EXIT, CR3_STORE_EXIT, USE_TERTIARY_CTLS, 2320 RSVD_18, CR8_LOAD_EXIT, CR8_STORE_EXIT, USE_TPR_SHADOW, NMI_WINDOW_EXIT, MOV_DR_EXIT, UNCOND_IO_EXIT, 2313 2321 USE_IO_BITMAPS, RSVD_26, MONITOR_TRAP_FLAG, USE_MSR_BITMAPS, MONITOR_EXIT, PAUSE_EXIT, 2314 2322 USE_SECONDARY_CTLS)); … … 3524 3532 3525 3533 /** The highest index value used for supported virtual VMCS field encoding. */ 3526 #define VMX_V_VMCS_MAX_INDEX RT_BF_GET(VMX_VMCS64_CTRL_ TSC_MULTIPLIER_HIGH, VMX_BF_VMCSFIELD_INDEX)3534 #define VMX_V_VMCS_MAX_INDEX RT_BF_GET(VMX_VMCS64_CTRL_ENCLV_EXITING_BITMAP_HIGH, VMX_BF_VMCSFIELD_INDEX) 3527 3535 3528 3536 /** … … 3615 3623 * corresponding fields in IEM (g_aoffVmcsMap), the corresponding saved 3616 3624 * state structure in CPUM (g_aVmxHwvirtVmcs) and bump the SSM version. 3617 * Also consider updating CPUMIsGuestVmxVmcsFieldValid .3625 * Also consider updating CPUMIsGuestVmxVmcsFieldValid and cpumR3InfoVmxVmcs. 3618 3626 */ 3619 3627 #pragma pack(1) … … 3716 3724 RTUINT64U u64SpptPtr; /**< 0x318 - Sub-page-permission-table pointer. */ 3717 3725 RTUINT64U u64TscMultiplier; /**< 0x320 - TSC multiplier. */ 3718 RTUINT64U au64Reserved0[15]; /**< 0x328 - Reserved for future. */ 3726 RTUINT64U u64ProcCtls3; /**< 0x328 - Tertiary-Processor based VM-execution controls. */ 3727 RTUINT64U u64EnclvExitBitmap; /**< 0x330 - ENCLV-exiting bitmap. */ 3728 RTUINT64U au64Reserved0[13]; /**< 0x338 - Reserved for future. */ 3719 3729 3720 3730 /** Natural-width fields. */ … … 3751 3761 RTUINT64U u64HostEferMsr; /**< 0x540 - Host EFER MSR. */ 3752 3762 RTUINT64U u64HostPerfGlobalCtlMsr; /**< 0x548 - Host global performance-control MSR. */ 3753 RTUINT64U au64Reserved3[16]; /**< 0x550 - Reserved for future. */ 3763 RTUINT64U u64HostPkrsMsr; /**< 0x550 - Host PKRS MSR. */ 3764 RTUINT64U au64Reserved3[15]; /**< 0x558 - Reserved for future. */ 3754 3765 3755 3766 /** Natural-width fields. */ … … 3766 3777 RTUINT64U u64HostRsp; /**< 0x620 - Host RSP. */ 3767 3778 RTUINT64U u64HostRip; /**< 0x628 - Host RIP. */ 3768 RTUINT64U au64Reserved7[32]; /**< 0x630 - Reserved for future. */ 3779 RTUINT64U u64HostSCetMsr; /**< 0x630 - Host S_CET MSR. */ 3780 RTUINT64U u64HostSsp; /**< 0x638 - Host SSP. */ 3781 RTUINT64U u64HostIntrSspTblAddrMsr; /**< 0x640 - Host Interrupt SSP table address MSR. */ 3782 RTUINT64U au64Reserved7[29]; /**< 0x648 - Reserved for future. */ 3769 3783 /** @} */ 3770 3784 … … 3824 3838 RTUINT64U u64GuestBndcfgsMsr; /**< 0x830 - Guest Bounds config MPX MSR (Intel Memory Protection Extensions). */ 3825 3839 RTUINT64U u64GuestRtitCtlMsr; /**< 0x838 - Guest RTIT control MSR (Intel Real Time Instruction Trace). */ 3826 RTUINT64U au64Reserved2[32]; /**< 0x840 - Reserved for future. */ 3840 RTUINT64U u64GuestPkrsMsr; /**< 0x840 - Guest PKRS MSR. */ 3841 RTUINT64U au64Reserved2[31]; /**< 0x848 - Reserved for future. */ 3827 3842 3828 3843 /** Natural-width fields. */ … … 3847 3862 RTUINT64U u64GuestSysenterEsp; /**< 0x9d0 - Guest SYSENTER ESP. */ 3848 3863 RTUINT64U u64GuestSysenterEip; /**< 0x9d8 - Guest SYSENTER EIP. */ 3849 RTUINT64U au64Reserved6[32]; /**< 0x9e0 - Reserved for future. */ 3864 RTUINT64U u64GuestSCetMsr; /**< 0x9e0 - Guest S_CET MSR. */ 3865 RTUINT64U u64GuestSsp; /**< 0x9e8 - Guest SSP. */ 3866 RTUINT64U u64GuestIntrSspTblAddrMsr; /**< 0x9f0 - Guest Interrupt SSP table address MSR. */ 3867 RTUINT64U au64Reserved6[29]; /**< 0x9f8 - Reserved for future. */ 3850 3868 /** @} */ 3851 3869 -
trunk/include/iprt/x86.h
r89475 r91037 1600 1600 /** Information for enumerating fields in the VMCS. */ 1601 1601 #define MSR_IA32_VMX_VMCS_ENUM 0x48A 1602 /** Allowed settings for secondary proc -based VM execution controls*/1602 /** Allowed settings for secondary processor-based VM-execution controls. */ 1603 1603 #define MSR_IA32_VMX_PROCBASED_CTLS2 0x48B 1604 1604 /** EPT capabilities. */ … … 1614 1614 /** Allowed settings for the VM-function controls. */ 1615 1615 #define MSR_IA32_VMX_VMFUNC 0x491 1616 /** Tertiary processor-based VM execution controls. */ 1617 #define MSR_IA32_VMX_PROCBASED_CTLS3 0x492 1616 1618 1617 1619 /** Intel PT - Enable and control for trace packet generation. */ -
trunk/src/VBox/HostDrivers/Support/SUPDrv.cpp
r90862 r91037 4729 4729 Msrs.u.vmx.u64VmFunc = ASMRdMsr(MSR_IA32_VMX_VMFUNC); 4730 4730 } 4731 4732 if (Msrs.u.vmx.ProcCtls.n.allowed1 & VMX_PROC_CTLS_USE_TERTIARY_CTLS) 4733 Msrs.u.vmx.u64ProcCtls3 = ASMRdMsr(MSR_IA32_VMX_PROCBASED_CTLS3); 4731 4734 } 4732 4735 else if (fCaps & SUPVTCAPS_AMD_V) -
trunk/src/VBox/HostDrivers/Support/SUPDrvIOC.h
r90970 r91037 223 223 * - nothing 224 224 */ 225 #define SUPDRV_IOC_VERSION 0x0031000 1225 #define SUPDRV_IOC_VERSION 0x00310002 226 226 227 227 /** SUP_IOCTL_COOKIE. */ -
trunk/src/VBox/HostDrivers/Support/SUPLib.cpp
r90970 r91037 279 279 CookieReq.u.In.u32ReqVersion = SUPDRV_IOC_VERSION; 280 280 const uint32_t uMinVersion = (SUPDRV_IOC_VERSION & 0xffff0000) == 0x00300000 281 ? 0x0031000 1281 ? 0x00310002 282 282 : SUPDRV_IOC_VERSION & 0xffff0000; 283 283 CookieReq.u.In.u32MinVersion = uMinVersion; -
trunk/src/VBox/VMM/VMMAll/CPUMAllRegs.cpp
r90998 r91037 2626 2626 case VMX_VMCS64_CTRL_XSS_EXITING_BITMAP_FULL: 2627 2627 case VMX_VMCS64_CTRL_XSS_EXITING_BITMAP_HIGH: return pFeat->fVmxXsavesXrstors; 2628 case VMX_VMCS64_CTRL_ENCLS_EXITING_BITMAP_FULL:2629 case VMX_VMCS64_CTRL_ENCLS_EXITING_BITMAP_HIGH: return false;2630 2628 case VMX_VMCS64_CTRL_TSC_MULTIPLIER_FULL: 2631 2629 case VMX_VMCS64_CTRL_TSC_MULTIPLIER_HIGH: return pFeat->fVmxUseTscScaling; 2630 case VMX_VMCS64_CTRL_PROC_EXEC3_FULL: 2631 case VMX_VMCS64_CTRL_PROC_EXEC3_HIGH: return pFeat->fVmxTertiaryExecCtls; 2632 2632 2633 2633 /* Read-only data fields. */ … … 2644 2644 case VMX_VMCS64_GUEST_EFER_FULL: 2645 2645 case VMX_VMCS64_GUEST_EFER_HIGH: return pFeat->fVmxEntryLoadEferMsr || pFeat->fVmxExitSaveEferMsr; 2646 case VMX_VMCS64_GUEST_PERF_GLOBAL_CTRL_FULL:2647 case VMX_VMCS64_GUEST_PERF_GLOBAL_CTRL_HIGH: return false;2648 2646 case VMX_VMCS64_GUEST_PDPTE0_FULL: 2649 2647 case VMX_VMCS64_GUEST_PDPTE0_HIGH: … … 2654 2652 case VMX_VMCS64_GUEST_PDPTE3_FULL: 2655 2653 case VMX_VMCS64_GUEST_PDPTE3_HIGH: return pFeat->fVmxEpt; 2656 case VMX_VMCS64_GUEST_BNDCFGS_FULL:2657 case VMX_VMCS64_GUEST_BNDCFGS_HIGH: return false;2658 2654 2659 2655 /* Host-state fields. */ … … 2662 2658 case VMX_VMCS64_HOST_EFER_FULL: 2663 2659 case VMX_VMCS64_HOST_EFER_HIGH: return pFeat->fVmxExitLoadEferMsr; 2664 case VMX_VMCS64_HOST_PERF_GLOBAL_CTRL_FULL:2665 case VMX_VMCS64_HOST_PERF_GLOBAL_CTRL_HIGH: return false;2666 2660 2667 2661 /* -
trunk/src/VBox/VMM/VMMAll/HMAll.cpp
r87563 r91037 852 852 pVmxMsrs->u64VmFunc = pHwvirtMsrs->u.vmx.u64VmFunc; 853 853 pVmxMsrs->u64EptVpidCaps = pHwvirtMsrs->u.vmx.u64EptVpidCaps; 854 pVmxMsrs->u64ProcCtls3 = pHwvirtMsrs->u.vmx.u64ProcCtls3; 854 855 } 855 856 -
trunk/src/VBox/VMM/VMMAll/HMVMXAll.cpp
r87921 r91037 814 814 * Dumps the virtual VMCS state to the release log. 815 815 * 816 * This is a purely a convenience function to output to the release log because 817 * cpumR3InfoVmxVmcs dumps only to the debug console and isn't always easy to use in 818 * case of a crash. 819 * 816 820 * @param pVCpu The cross context virtual CPU structure. 817 821 */ -
trunk/src/VBox/VMM/VMMAll/IEMAllCImplVmxInstr.cpp.h
r87040 r91037 200 200 /* 3-10 */ UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 201 201 /* 11-18 */ UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 202 /* 19-25 */ UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX 202 /* 19-26 */ UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 203 /* 27 */ UINT16_MAX, 203 204 }, 204 205 /* VMX_VMCSFIELD_WIDTH_16BIT | VMX_VMCSFIELD_TYPE_VMEXIT_INFO: */ … … 207 208 /* 8-15 */ UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 208 209 /* 16-23 */ UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 209 /* 24-2 5 */UINT16_MAX, UINT16_MAX210 /* 24-27 */ UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX 210 211 }, 211 212 /* VMX_VMCSFIELD_WIDTH_16BIT | VMX_VMCSFIELD_TYPE_GUEST_STATE: */ … … 222 223 /* 9 */ RT_UOFFSETOF(VMXVVMCS, u16PmlIndex), 223 224 /* 10-17 */ UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 224 /* 18-25 */ UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX 225 /* 18-25 */ UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 226 /* 26-27 */ UINT16_MAX, UINT16_MAX 225 227 }, 226 228 /* VMX_VMCSFIELD_WIDTH_16BIT | VMX_VMCSFIELD_TYPE_HOST_STATE: */ … … 235 237 /* 7-14 */ UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 236 238 /* 15-22 */ UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 237 /* 23-2 5 */UINT16_MAX, UINT16_MAX, UINT16_MAX239 /* 23-27 */ UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX 238 240 }, 239 241 /* VMX_VMCSFIELD_WIDTH_64BIT | VMX_VMCSFIELD_TYPE_CONTROL: */ … … 264 266 /* 23 */ RT_UOFFSETOF(VMXVVMCS, u64EnclsBitmap), 265 267 /* 24 */ RT_UOFFSETOF(VMXVVMCS, u64SpptPtr), 266 /* 25 */ RT_UOFFSETOF(VMXVVMCS, u64TscMultiplier) 268 /* 25 */ RT_UOFFSETOF(VMXVVMCS, u64TscMultiplier), 269 /* 26 */ RT_UOFFSETOF(VMXVVMCS, u64ProcCtls3), 270 /* 27 */ RT_UOFFSETOF(VMXVVMCS, u64EnclvExitBitmap) 267 271 }, 268 272 /* VMX_VMCSFIELD_WIDTH_64BIT | VMX_VMCSFIELD_TYPE_VMEXIT_INFO: */ … … 272 276 /* 9-16 */ UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 273 277 /* 17-24 */ UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 274 /* 25 */UINT16_MAX278 /* 25-27 */ UINT16_MAX, UINT16_MAX, UINT16_MAX 275 279 }, 276 280 /* VMX_VMCSFIELD_WIDTH_64BIT | VMX_VMCSFIELD_TYPE_GUEST_STATE: */ … … 287 291 /* 9 */ RT_UOFFSETOF(VMXVVMCS, u64GuestBndcfgsMsr), 288 292 /* 10 */ RT_UOFFSETOF(VMXVVMCS, u64GuestRtitCtlMsr), 289 /* 11-18 */ UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 290 /* 19-25 */ UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX 293 /* 11 */ UINT16_MAX, 294 /* 12 */ RT_UOFFSETOF(VMXVVMCS, u64GuestPkrsMsr), 295 /* 13-20 */ UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 296 /* 21-27 */ UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX 291 297 }, 292 298 /* VMX_VMCSFIELD_WIDTH_64BIT | VMX_VMCSFIELD_TYPE_HOST_STATE: */ … … 295 301 /* 1 */ RT_UOFFSETOF(VMXVVMCS, u64HostEferMsr), 296 302 /* 2 */ RT_UOFFSETOF(VMXVVMCS, u64HostPerfGlobalCtlMsr), 297 /* 3-10 */ UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 298 /* 11-18 */ UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 299 /* 19-25 */ UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX 303 /* 3 */ RT_UOFFSETOF(VMXVVMCS, u64HostPkrsMsr), 304 /* 4-11 */ UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 305 /* 12-19 */ UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 306 /* 20-27 */ UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX 300 307 }, 301 308 /* VMX_VMCSFIELD_WIDTH_32BIT | VMX_VMCSFIELD_TYPE_CONTROL: */ … … 319 326 /* 16 */ RT_UOFFSETOF(VMXVVMCS, u32PleGap), 320 327 /* 17 */ RT_UOFFSETOF(VMXVVMCS, u32PleWindow), 321 /* 18-25 */ UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX 328 /* 18-25 */ UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 329 /* 26-27 */ UINT16_MAX, UINT16_MAX 322 330 }, 323 331 /* VMX_VMCSFIELD_WIDTH_32BIT | VMX_VMCSFIELD_TYPE_VMEXIT_INFO: */ … … 333 341 /* 8-15 */ UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 334 342 /* 16-23 */ UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 335 /* 24-2 5 */UINT16_MAX, UINT16_MAX343 /* 24-27 */ UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX 336 344 }, 337 345 /* VMX_VMCSFIELD_WIDTH_32BIT | VMX_VMCSFIELD_TYPE_GUEST_STATE: */ … … 361 369 /* 22 */ UINT16_MAX, 362 370 /* 23 */ RT_UOFFSETOF(VMXVVMCS, u32PreemptTimer), 363 /* 24-2 5 */UINT16_MAX, UINT16_MAX371 /* 24-27 */ UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX 364 372 }, 365 373 /* VMX_VMCSFIELD_WIDTH_32BIT | VMX_VMCSFIELD_TYPE_HOST_STATE: */ … … 369 377 /* 9-16 */ UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 370 378 /* 17-24 */ UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 371 /* 25 */UINT16_MAX379 /* 25-27 */ UINT16_MAX, UINT16_MAX, UINT16_MAX 372 380 }, 373 381 /* VMX_VMCSFIELD_WIDTH_NATURAL | VMX_VMCSFIELD_TYPE_CONTROL: */ … … 383 391 /* 8-15 */ UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 384 392 /* 16-23 */ UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 385 /* 24-2 5 */UINT16_MAX, UINT16_MAX393 /* 24-27 */ UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX 386 394 }, 387 395 /* VMX_VMCSFIELD_WIDTH_NATURAL | VMX_VMCSFIELD_TYPE_VMEXIT_INFO: */ … … 395 403 /* 6-13 */ UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 396 404 /* 14-21 */ UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 397 /* 22-2 5 */UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX405 /* 22-27 */ UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX 398 406 }, 399 407 /* VMX_VMCSFIELD_WIDTH_NATURAL | VMX_VMCSFIELD_TYPE_GUEST_STATE: */ … … 419 427 /* 18 */ RT_UOFFSETOF(VMXVVMCS, u64GuestSysenterEsp), 420 428 /* 19 */ RT_UOFFSETOF(VMXVVMCS, u64GuestSysenterEip), 421 /* 20-25 */ UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX 429 /* 20 */ RT_UOFFSETOF(VMXVVMCS, u64GuestSCetMsr), 430 /* 21 */ RT_UOFFSETOF(VMXVVMCS, u64GuestSsp), 431 /* 22 */ RT_UOFFSETOF(VMXVVMCS, u64GuestIntrSspTblAddrMsr), 432 /* 23-27 */ UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX 422 433 }, 423 434 /* VMX_VMCSFIELD_WIDTH_NATURAL | VMX_VMCSFIELD_TYPE_HOST_STATE: */ … … 435 446 /* 10 */ RT_UOFFSETOF(VMXVVMCS, u64HostRsp), 436 447 /* 11 */ RT_UOFFSETOF(VMXVVMCS, u64HostRip), 437 /* 12-19 */ UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 438 /* 20-25 */ UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX 448 /* 12 */ RT_UOFFSETOF(VMXVVMCS, u64HostSCetMsr), 449 /* 13 */ RT_UOFFSETOF(VMXVVMCS, u64HostSsp), 450 /* 14 */ RT_UOFFSETOF(VMXVVMCS, u64HostIntrSspTblAddrMsr), 451 /* 15-22 */ UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 452 /* 23-27 */ UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX 439 453 } 440 454 }; -
trunk/src/VBox/VMM/VMMR0/HMVMXR0.cpp
r90947 r91037 843 843 /* 67 VMX_EXIT_UMWAIT */ { hmR0VmxExitErrUnexpected }, 844 844 /* 68 VMX_EXIT_TPAUSE */ { hmR0VmxExitErrUnexpected }, 845 /* 69 VMX_EXIT_LOADIWKEY */ { hmR0VmxExitErrUnexpected }, 845 846 }; 846 847 #endif /* HMVMX_USE_FUNCTION_TABLE */ … … 13080 13081 case VMX_EXIT_UMWAIT: 13081 13082 case VMX_EXIT_TPAUSE: 13083 case VMX_EXIT_LOADIWKEY: 13082 13084 default: 13083 13085 return hmR0VmxExitErrUnexpected(pVCpu, pVmxTransient); … … 15348 15350 * VMX_EXIT_UMWAIT: 15349 15351 * VMX_EXIT_TPAUSE: 15352 * VMX_EXIT_LOADIWKEY: 15350 15353 * These VM-exits are -not- caused unconditionally by execution of the corresponding 15351 15354 * instruction. Any VM-exit for these instructions indicate a hardware problem, … … 17661 17664 Assert(CPUMIsGuestVmxProcCtls2Set(pCtx, VMX_PROC_CTLS2_USER_WAIT_PAUSE)); 17662 17665 break; 17666 17667 case VMX_EXIT_LOADIWKEY: 17668 Assert(CPUMIsGuestVmxProcCtls3Set(pCtx, VMX_PROC_CTLS3_LOADIWKEY_EXIT)); 17669 break; 17663 17670 } 17664 17671 #endif -
trunk/src/VBox/VMM/VMMR3/CPUM.cpp
r90914 r91037 410 410 SSMFIELD_ENTRY( VMXVVMCS, u64SpptPtr), 411 411 SSMFIELD_ENTRY( VMXVVMCS, u64TscMultiplier), 412 SSMFIELD_ENTRY_VER( VMXVVMCS, u64ProcCtls3, CPUM_SAVED_STATE_VERSION_HWVIRT_VMX_2), 413 SSMFIELD_ENTRY_VER( VMXVVMCS, u64EnclvExitBitmap, CPUM_SAVED_STATE_VERSION_HWVIRT_VMX_2), 412 414 SSMFIELD_ENTRY_IGNORE(VMXVVMCS, au64Reserved0), 413 415 … … 437 439 SSMFIELD_ENTRY( VMXVVMCS, u64HostEferMsr), 438 440 SSMFIELD_ENTRY( VMXVVMCS, u64HostPerfGlobalCtlMsr), 441 SSMFIELD_ENTRY_VER( VMXVVMCS, u64HostPkrsMsr, CPUM_SAVED_STATE_VERSION_HWVIRT_VMX_2), 439 442 SSMFIELD_ENTRY_IGNORE(VMXVVMCS, au64Reserved3), 440 443 … … 451 454 SSMFIELD_ENTRY( VMXVVMCS, u64HostRsp), 452 455 SSMFIELD_ENTRY( VMXVVMCS, u64HostRip), 456 SSMFIELD_ENTRY_VER( VMXVVMCS, u64HostSCetMsr, CPUM_SAVED_STATE_VERSION_HWVIRT_VMX_2), 457 SSMFIELD_ENTRY_VER( VMXVVMCS, u64HostSsp, CPUM_SAVED_STATE_VERSION_HWVIRT_VMX_2), 458 SSMFIELD_ENTRY_VER( VMXVVMCS, u64HostIntrSspTblAddrMsr, CPUM_SAVED_STATE_VERSION_HWVIRT_VMX_2), 453 459 SSMFIELD_ENTRY_IGNORE(VMXVVMCS, au64Reserved7), 454 460 … … 501 507 SSMFIELD_ENTRY( VMXVVMCS, u64GuestBndcfgsMsr), 502 508 SSMFIELD_ENTRY( VMXVVMCS, u64GuestRtitCtlMsr), 509 SSMFIELD_ENTRY_VER( VMXVVMCS, u64GuestPkrsMsr, CPUM_SAVED_STATE_VERSION_HWVIRT_VMX_2), 503 510 SSMFIELD_ENTRY_IGNORE(VMXVVMCS, au64Reserved2), 504 511 … … 523 530 SSMFIELD_ENTRY( VMXVVMCS, u64GuestSysenterEsp), 524 531 SSMFIELD_ENTRY( VMXVVMCS, u64GuestSysenterEip), 532 SSMFIELD_ENTRY_VER( VMXVVMCS, u64GuestSCetMsr, CPUM_SAVED_STATE_VERSION_HWVIRT_VMX_2), 533 SSMFIELD_ENTRY_VER( VMXVVMCS, u64GuestSsp, CPUM_SAVED_STATE_VERSION_HWVIRT_VMX_2), 534 SSMFIELD_ENTRY_VER( VMXVVMCS, u64GuestIntrSspTblAddrMsr, CPUM_SAVED_STATE_VERSION_HWVIRT_VMX_2), 525 535 SSMFIELD_ENTRY_IGNORE(VMXVVMCS, au64Reserved6), 526 536 … … 1612 1622 | (pGuestFeatures->fVmxCr3LoadExit << VMX_BF_PROC_CTLS_CR3_LOAD_EXIT_SHIFT ) 1613 1623 | (pGuestFeatures->fVmxCr3StoreExit << VMX_BF_PROC_CTLS_CR3_STORE_EXIT_SHIFT ) 1624 | (pGuestFeatures->fVmxTertiaryExecCtls << VMX_BF_PROC_CTLS_USE_TERTIARY_CTLS_SHIFT ) 1614 1625 | (pGuestFeatures->fVmxCr8LoadExit << VMX_BF_PROC_CTLS_CR8_LOAD_EXIT_SHIFT ) 1615 1626 | (pGuestFeatures->fVmxCr8StoreExit << VMX_BF_PROC_CTLS_CR8_STORE_EXIT_SHIFT ) … … 1659 1670 } 1660 1671 1672 /* Tertiary processor-based VM-execution controls. */ 1673 if (pGuestFeatures->fVmxTertiaryExecCtls) 1674 { 1675 pGuestVmxMsrs->u64ProcCtls3 = (pGuestFeatures->fVmxLoadIwKeyExit << VMX_BF_PROC_CTLS3_LOADIWKEY_EXIT_SHIFT); 1676 } 1677 1661 1678 /* VM-exit controls. */ 1662 1679 { … … 1773 1790 static bool cpumR3AreVmxCpuFeaturesCompatible(PVM pVM, PCCPUMFEATURES pBase, PCCPUMFEATURES pGst) 1774 1791 { 1775 if (cpumR3IsHwAssistNstGstExecAllowed(pVM)) 1792 if (!cpumR3IsHwAssistNstGstExecAllowed(pVM)) 1793 return false; 1794 1795 /* Check first set of feature bits. */ 1776 1796 { 1777 1797 uint64_t const fBase = ((uint64_t)pBase->fVmxInsOutInfo << 0) | ((uint64_t)pBase->fVmxExtIntExit << 1) … … 1844 1864 { 1845 1865 uint64_t const fDiff = fBase ^ fGst; 1846 LogRel(("CPUM: VMX features now exposed to the guest are incompatible with those from the saved state. fBase=%#RX64 fGst=%#RX64 fDiff=%#RX64\n",1866 LogRel(("CPUM: VMX features (1) now exposed to the guest are incompatible with those from the saved state. fBase=%#RX64 fGst=%#RX64 fDiff=%#RX64\n", 1847 1867 fBase, fGst, fDiff)); 1848 1868 return false; 1849 1869 } 1850 return true; 1851 } 1870 } 1871 1872 /* Check second set of feature bits. */ 1873 { 1874 uint64_t const fBase = ((uint64_t)pBase->fVmxTertiaryExecCtls << 0) | ((uint64_t)pBase->fVmxLoadIwKeyExit << 1); 1875 uint64_t const fGst = ((uint64_t)pGst->fVmxTertiaryExecCtls << 0) | ((uint64_t)pGst->fVmxLoadIwKeyExit << 1); 1876 if ((fBase | fGst) != fBase) 1877 { 1878 uint64_t const fDiff = fBase ^ fGst; 1879 LogRel(("CPUM: VMX features (2) now exposed to the guest are incompatible with those from the saved state. fBase=%#RX64 fGst=%#RX64 fDiff=%#RX64\n", 1880 fBase, fGst, fDiff)); 1881 return false; 1882 } 1883 } 1884 1852 1885 return true; 1853 1886 } … … 1892 1925 EmuFeat.fVmxCr3LoadExit = 1; 1893 1926 EmuFeat.fVmxCr3StoreExit = 1; 1927 EmuFeat.fVmxTertiaryExecCtls = 0; 1894 1928 EmuFeat.fVmxCr8LoadExit = 1; 1895 1929 EmuFeat.fVmxCr8StoreExit = 1; … … 1924 1958 EmuFeat.fVmxXsavesXrstors = 0; 1925 1959 EmuFeat.fVmxUseTscScaling = 0; 1960 EmuFeat.fVmxLoadIwKeyExit = 0; 1926 1961 EmuFeat.fVmxEntryLoadDebugCtls = 1; 1927 1962 EmuFeat.fVmxIa32eModeGuest = 1; … … 1965 2000 pGuestFeat->fVmxCr3LoadExit = (pBaseFeat->fVmxCr3LoadExit & EmuFeat.fVmxCr3LoadExit ); 1966 2001 pGuestFeat->fVmxCr3StoreExit = (pBaseFeat->fVmxCr3StoreExit & EmuFeat.fVmxCr3StoreExit ); 2002 pGuestFeat->fVmxTertiaryExecCtls = (pBaseFeat->fVmxTertiaryExecCtls & EmuFeat.fVmxTertiaryExecCtls ); 1967 2003 pGuestFeat->fVmxCr8LoadExit = (pBaseFeat->fVmxCr8LoadExit & EmuFeat.fVmxCr8LoadExit ); 1968 2004 pGuestFeat->fVmxCr8StoreExit = (pBaseFeat->fVmxCr8StoreExit & EmuFeat.fVmxCr8StoreExit ); … … 1997 2033 pGuestFeat->fVmxXsavesXrstors = (pBaseFeat->fVmxXsavesXrstors & EmuFeat.fVmxXsavesXrstors ); 1998 2034 pGuestFeat->fVmxUseTscScaling = (pBaseFeat->fVmxUseTscScaling & EmuFeat.fVmxUseTscScaling ); 2035 pGuestFeat->fVmxLoadIwKeyExit = (pBaseFeat->fVmxLoadIwKeyExit & EmuFeat.fVmxLoadIwKeyExit ); 1999 2036 pGuestFeat->fVmxEntryLoadDebugCtls = (pBaseFeat->fVmxEntryLoadDebugCtls & EmuFeat.fVmxEntryLoadDebugCtls ); 2000 2037 pGuestFeat->fVmxIa32eModeGuest = (pBaseFeat->fVmxIa32eModeGuest & EmuFeat.fVmxIa32eModeGuest ); … … 2046 2083 Assert(!pGuestFeat->fVmxUseTscScaling); 2047 2084 } 2085 if (!pGuestFeat->fVmxTertiaryExecCtls) 2086 Assert(!pGuestFeat->fVmxLoadIwKeyExit); 2048 2087 if (pGuestFeat->fVmxUnrestrictedGuest) 2049 2088 { … … 2660 2699 SSMR3PutU64(pSSM, pGstCtx->hwvirt.vmx.Msrs.u64VmFunc); 2661 2700 SSMR3PutU64(pSSM, pGstCtx->hwvirt.vmx.Msrs.u64EptVpidCaps); 2701 SSMR3PutU64(pSSM, pGstCtx->hwvirt.vmx.Msrs.u64ProcCtls3); 2662 2702 } 2663 2703 SSMR3PutU32(pSSM, pVCpu->cpum.s.fUseFlags); … … 2693 2733 * Validate version. 2694 2734 */ 2695 if ( uVersion != CPUM_SAVED_STATE_VERSION_HWVIRT_VMX 2735 if ( uVersion != CPUM_SAVED_STATE_VERSION_HWVIRT_VMX_2 2736 && uVersion != CPUM_SAVED_STATE_VERSION_HWVIRT_VMX 2696 2737 && uVersion != CPUM_SAVED_STATE_VERSION_HWVIRT_SVM 2697 2738 && uVersion != CPUM_SAVED_STATE_VERSION_XSAVE … … 2940 2981 SSMR3GetU64(pSSM, &pGstCtx->hwvirt.vmx.Msrs.u64VmFunc); 2941 2982 SSMR3GetU64(pSSM, &pGstCtx->hwvirt.vmx.Msrs.u64EptVpidCaps); 2983 if (uVersion >= CPUM_SAVED_STATE_VERSION_HWVIRT_VMX_2) 2984 SSMR3GetU64(pSSM, &pGstCtx->hwvirt.vmx.Msrs.u64ProcCtls3); 2942 2985 } 2943 2986 } … … 3858 3901 pHlp->pfnPrintf(pHlp, " %sSPPT ptr = %#RX64\n", pszPrefix, pVmcs->u64SpptPtr.u); 3859 3902 pHlp->pfnPrintf(pHlp, " %sTSC multiplier = %#RX64\n", pszPrefix, pVmcs->u64TscMultiplier.u); 3903 pHlp->pfnPrintf(pHlp, " %sTertiary processor ctls = %#RX64\n", pszPrefix, pVmcs->u64ProcCtls3.u); 3904 pHlp->pfnPrintf(pHlp, " %sENCLV-exiting bitmap = %#RX64\n", pszPrefix, pVmcs->u64EnclvExitBitmap.u); 3860 3905 3861 3906 /* Natural width. */ … … 3877 3922 3878 3923 /* 16-bit. */ 3879 CPUMVMX_DUMP_GUEST_SEGREG(pHlp, pVmcs, Cs, " cs", pszPrefix);3880 CPUMVMX_DUMP_GUEST_SEGREG(pHlp, pVmcs, Ss, " ss", pszPrefix);3881 CPUMVMX_DUMP_GUEST_SEGREG(pHlp, pVmcs, Es, " es", pszPrefix);3882 CPUMVMX_DUMP_GUEST_SEGREG(pHlp, pVmcs, Ds, " ds", pszPrefix);3883 CPUMVMX_DUMP_GUEST_SEGREG(pHlp, pVmcs, Fs, " fs", pszPrefix);3884 CPUMVMX_DUMP_GUEST_SEGREG(pHlp, pVmcs, Gs, " gs", pszPrefix);3885 CPUMVMX_DUMP_GUEST_SEGREG(pHlp, pVmcs, Ldtr, " ldtr", pszPrefix);3886 CPUMVMX_DUMP_GUEST_SEGREG(pHlp, pVmcs, Tr, " tr", pszPrefix);3887 CPUMVMX_DUMP_GUEST_XDTR(pHlp, pVmcs, Gdtr, " gdtr", pszPrefix);3888 CPUMVMX_DUMP_GUEST_XDTR(pHlp, pVmcs, Idtr, " idtr", pszPrefix);3924 CPUMVMX_DUMP_GUEST_SEGREG(pHlp, pVmcs, Cs, "CS", pszPrefix); 3925 CPUMVMX_DUMP_GUEST_SEGREG(pHlp, pVmcs, Ss, "SS", pszPrefix); 3926 CPUMVMX_DUMP_GUEST_SEGREG(pHlp, pVmcs, Es, "ES", pszPrefix); 3927 CPUMVMX_DUMP_GUEST_SEGREG(pHlp, pVmcs, Ds, "DS", pszPrefix); 3928 CPUMVMX_DUMP_GUEST_SEGREG(pHlp, pVmcs, Fs, "FS", pszPrefix); 3929 CPUMVMX_DUMP_GUEST_SEGREG(pHlp, pVmcs, Gs, "GS", pszPrefix); 3930 CPUMVMX_DUMP_GUEST_SEGREG(pHlp, pVmcs, Ldtr, "LDTR", pszPrefix); 3931 CPUMVMX_DUMP_GUEST_SEGREG(pHlp, pVmcs, Tr, "TR", pszPrefix); 3932 CPUMVMX_DUMP_GUEST_XDTR(pHlp, pVmcs, Gdtr, "GDTR", pszPrefix); 3933 CPUMVMX_DUMP_GUEST_XDTR(pHlp, pVmcs, Idtr, "IDTR", pszPrefix); 3889 3934 pHlp->pfnPrintf(pHlp, " %sInterrupt status = %#RX16\n", pszPrefix, pVmcs->u16GuestIntStatus); 3890 3935 pHlp->pfnPrintf(pHlp, " %sPML index = %#RX16\n", pszPrefix, pVmcs->u16PmlIndex); … … 3909 3954 pHlp->pfnPrintf(pHlp, " %sBNDCFGS = %#RX64\n", pszPrefix, pVmcs->u64GuestBndcfgsMsr.u); 3910 3955 pHlp->pfnPrintf(pHlp, " %sRTIT_CTL = %#RX64\n", pszPrefix, pVmcs->u64GuestRtitCtlMsr.u); 3956 pHlp->pfnPrintf(pHlp, " %sPKRS = %#RX64\n", pszPrefix, pVmcs->u64GuestPkrsMsr.u); 3911 3957 3912 3958 /* Natural width. */ 3913 pHlp->pfnPrintf(pHlp, " %s cr0 = %#RX64\n", pszPrefix, pVmcs->u64GuestCr0.u);3914 pHlp->pfnPrintf(pHlp, " %s cr3 = %#RX64\n", pszPrefix, pVmcs->u64GuestCr3.u);3915 pHlp->pfnPrintf(pHlp, " %s cr4 = %#RX64\n", pszPrefix, pVmcs->u64GuestCr4.u);3916 pHlp->pfnPrintf(pHlp, " %s dr7 = %#RX64\n", pszPrefix, pVmcs->u64GuestDr7.u);3917 pHlp->pfnPrintf(pHlp, " %s rsp= %#RX64\n", pszPrefix, pVmcs->u64GuestRsp.u);3918 pHlp->pfnPrintf(pHlp, " %s rip= %#RX64\n", pszPrefix, pVmcs->u64GuestRip.u);3919 pHlp->pfnPrintf(pHlp, " %s rflags= %#RX64 %31s\n",pszPrefix, pVmcs->u64GuestRFlags.u, szEFlags);3959 pHlp->pfnPrintf(pHlp, " %sCR0 = %#RX64\n", pszPrefix, pVmcs->u64GuestCr0.u); 3960 pHlp->pfnPrintf(pHlp, " %sCR3 = %#RX64\n", pszPrefix, pVmcs->u64GuestCr3.u); 3961 pHlp->pfnPrintf(pHlp, " %sCR4 = %#RX64\n", pszPrefix, pVmcs->u64GuestCr4.u); 3962 pHlp->pfnPrintf(pHlp, " %sDR7 = %#RX64\n", pszPrefix, pVmcs->u64GuestDr7.u); 3963 pHlp->pfnPrintf(pHlp, " %sRSP = %#RX64\n", pszPrefix, pVmcs->u64GuestRsp.u); 3964 pHlp->pfnPrintf(pHlp, " %sRIP = %#RX64\n", pszPrefix, pVmcs->u64GuestRip.u); 3965 pHlp->pfnPrintf(pHlp, " %sRFLAGS = %#RX64 %31s\n",pszPrefix, pVmcs->u64GuestRFlags.u, szEFlags); 3920 3966 pHlp->pfnPrintf(pHlp, " %sPending debug xcpts = %#RX64\n", pszPrefix, pVmcs->u64GuestPendingDbgXcpts.u); 3921 3967 pHlp->pfnPrintf(pHlp, " %sSysEnter ESP = %#RX64\n", pszPrefix, pVmcs->u64GuestSysenterEsp.u); 3922 3968 pHlp->pfnPrintf(pHlp, " %sSysEnter EIP = %#RX64\n", pszPrefix, pVmcs->u64GuestSysenterEip.u); 3969 pHlp->pfnPrintf(pHlp, " %sS_CET = %#RX64\n", pszPrefix, pVmcs->u64GuestSCetMsr.u); 3970 pHlp->pfnPrintf(pHlp, " %sSSP = %#RX64\n", pszPrefix, pVmcs->u64GuestSsp.u); 3971 pHlp->pfnPrintf(pHlp, " %sINTERRUPT_SSP_TABLE_ADDR = %#RX64\n", pszPrefix, pVmcs->u64GuestIntrSspTblAddrMsr.u); 3923 3972 } 3924 3973 … … 3928 3977 3929 3978 /* 16-bit. */ 3930 pHlp->pfnPrintf(pHlp, " %s cs= %#RX16\n", pszPrefix, pVmcs->HostCs);3931 pHlp->pfnPrintf(pHlp, " %s ss= %#RX16\n", pszPrefix, pVmcs->HostSs);3932 pHlp->pfnPrintf(pHlp, " %s ds= %#RX16\n", pszPrefix, pVmcs->HostDs);3933 pHlp->pfnPrintf(pHlp, " %s es= %#RX16\n", pszPrefix, pVmcs->HostEs);3934 CPUMVMX_DUMP_HOST_FS_GS_TR(pHlp, pVmcs, Fs, " fs", pszPrefix);3935 CPUMVMX_DUMP_HOST_FS_GS_TR(pHlp, pVmcs, Gs, " gs", pszPrefix);3936 CPUMVMX_DUMP_HOST_FS_GS_TR(pHlp, pVmcs, Tr, " tr", pszPrefix);3937 CPUMVMX_DUMP_HOST_XDTR(pHlp, pVmcs, Gdtr, " gdtr", pszPrefix);3938 CPUMVMX_DUMP_HOST_XDTR(pHlp, pVmcs, Idtr, " idtr", pszPrefix);3979 pHlp->pfnPrintf(pHlp, " %sCS = %#RX16\n", pszPrefix, pVmcs->HostCs); 3980 pHlp->pfnPrintf(pHlp, " %sSS = %#RX16\n", pszPrefix, pVmcs->HostSs); 3981 pHlp->pfnPrintf(pHlp, " %sDS = %#RX16\n", pszPrefix, pVmcs->HostDs); 3982 pHlp->pfnPrintf(pHlp, " %sES = %#RX16\n", pszPrefix, pVmcs->HostEs); 3983 CPUMVMX_DUMP_HOST_FS_GS_TR(pHlp, pVmcs, Fs, "FS", pszPrefix); 3984 CPUMVMX_DUMP_HOST_FS_GS_TR(pHlp, pVmcs, Gs, "GS", pszPrefix); 3985 CPUMVMX_DUMP_HOST_FS_GS_TR(pHlp, pVmcs, Tr, "TR", pszPrefix); 3986 CPUMVMX_DUMP_HOST_XDTR(pHlp, pVmcs, Gdtr, "GDTR", pszPrefix); 3987 CPUMVMX_DUMP_HOST_XDTR(pHlp, pVmcs, Idtr, "IDTR", pszPrefix); 3939 3988 3940 3989 /* 32-bit. */ … … 3945 3994 pHlp->pfnPrintf(pHlp, " %sPAT = %#RX64\n", pszPrefix, pVmcs->u64HostPatMsr.u); 3946 3995 pHlp->pfnPrintf(pHlp, " %sPERFGLOBALCTRL = %#RX64\n", pszPrefix, pVmcs->u64HostPerfGlobalCtlMsr.u); 3996 pHlp->pfnPrintf(pHlp, " %sPKRS = %#RX64\n", pszPrefix, pVmcs->u64HostPkrsMsr.u); 3947 3997 3948 3998 /* Natural width. */ 3949 pHlp->pfnPrintf(pHlp, " %s cr0 = %#RX64\n", pszPrefix, pVmcs->u64HostCr0.u);3950 pHlp->pfnPrintf(pHlp, " %s cr3 = %#RX64\n", pszPrefix, pVmcs->u64HostCr3.u);3951 pHlp->pfnPrintf(pHlp, " %s cr4 = %#RX64\n", pszPrefix, pVmcs->u64HostCr4.u);3999 pHlp->pfnPrintf(pHlp, " %sCR0 = %#RX64\n", pszPrefix, pVmcs->u64HostCr0.u); 4000 pHlp->pfnPrintf(pHlp, " %sCR3 = %#RX64\n", pszPrefix, pVmcs->u64HostCr3.u); 4001 pHlp->pfnPrintf(pHlp, " %sCR4 = %#RX64\n", pszPrefix, pVmcs->u64HostCr4.u); 3952 4002 pHlp->pfnPrintf(pHlp, " %sSysEnter ESP = %#RX64\n", pszPrefix, pVmcs->u64HostSysenterEsp.u); 3953 4003 pHlp->pfnPrintf(pHlp, " %sSysEnter EIP = %#RX64\n", pszPrefix, pVmcs->u64HostSysenterEip.u); 3954 pHlp->pfnPrintf(pHlp, " %srsp = %#RX64\n", pszPrefix, pVmcs->u64HostRsp.u); 3955 pHlp->pfnPrintf(pHlp, " %srip = %#RX64\n", pszPrefix, pVmcs->u64HostRip.u); 4004 pHlp->pfnPrintf(pHlp, " %sRSP = %#RX64\n", pszPrefix, pVmcs->u64HostRsp.u); 4005 pHlp->pfnPrintf(pHlp, " %sRIP = %#RX64\n", pszPrefix, pVmcs->u64HostRip.u); 4006 pHlp->pfnPrintf(pHlp, " %sS_CET = %#RX64\n", pszPrefix, pVmcs->u64HostSCetMsr.u); 4007 pHlp->pfnPrintf(pHlp, " %sSSP = %#RX64\n", pszPrefix, pVmcs->u64HostSsp.u); 4008 pHlp->pfnPrintf(pHlp, " %sINTERRUPT_SSP_TBL_ADDR = %#RX64\n", pszPrefix, pVmcs->u64HostIntrSspTblAddrMsr.u); 4009 3956 4010 } 3957 4011 -
trunk/src/VBox/VMM/VMMR3/CPUMR3CpuId.cpp
r90204 r91037 1773 1773 pFeatures->fVmxCr3LoadExit = RT_BOOL(fProcCtls & VMX_PROC_CTLS_CR3_LOAD_EXIT); 1774 1774 pFeatures->fVmxCr3StoreExit = RT_BOOL(fProcCtls & VMX_PROC_CTLS_CR3_STORE_EXIT); 1775 pFeatures->fVmxTertiaryExecCtls = RT_BOOL(fProcCtls & VMX_PROC_CTLS_USE_TERTIARY_CTLS); 1775 1776 pFeatures->fVmxCr8LoadExit = RT_BOOL(fProcCtls & VMX_PROC_CTLS_CR8_LOAD_EXIT); 1776 1777 pFeatures->fVmxCr8StoreExit = RT_BOOL(fProcCtls & VMX_PROC_CTLS_CR8_STORE_EXIT); … … 1810 1811 pFeatures->fVmxXsavesXrstors = RT_BOOL(fProcCtls2 & VMX_PROC_CTLS2_XSAVES_XRSTORS); 1811 1812 pFeatures->fVmxUseTscScaling = RT_BOOL(fProcCtls2 & VMX_PROC_CTLS2_TSC_SCALING); 1813 } 1814 1815 /* Tertiary processor-based VM-execution controls. */ 1816 { 1817 uint64_t const fProcCtls3 = pFeatures->fVmxTertiaryExecCtls ? pVmxMsrs->u64ProcCtls3 : 0; 1812 1818 } 1813 1819 -
trunk/src/VBox/VMM/VMMR3/HM.cpp
r89976 r91037 1356 1356 1357 1357 /** 1358 * Reports MSR_IA32_VMX_PROCBASED_CTLS3 MSR to the log. 1359 * 1360 * @param uProcCtls3 The tertiary processor-based VM-execution control MSR. 1361 */ 1362 static void hmR3VmxReportProcBasedCtls3Msr(uint64_t uProcCtls3) 1363 { 1364 LogRel(("HM: MSR_IA32_VMX_PROCBASED_CTLS3 = %#RX64\n", uProcCtls3)); 1365 LogRel(("HM: LOADIWKEY_EXIT = %RTbool\n", RT_BOOL(uProcCtls3 & VMX_PROC_CTLS3_LOADIWKEY_EXIT))); 1366 } 1367 1368 1369 /** 1358 1370 * Reports MSR_IA32_VMX_ENTRY_CTLS to the log. 1359 1371 * … … 1528 1540 if (pVM->hm.s.ForR3.vmx.Msrs.ProcCtls.n.allowed1 & VMX_PROC_CTLS_USE_SECONDARY_CTLS) 1529 1541 hmR3VmxReportProcBasedCtls2Msr(&pVM->hm.s.ForR3.vmx.Msrs.ProcCtls2); 1542 if (pVM->hm.s.ForR3.vmx.Msrs.ProcCtls.n.allowed1 & VMX_PROC_CTLS_USE_TERTIARY_CTLS) 1543 hmR3VmxReportProcBasedCtls3Msr(pVM->hm.s.ForR3.vmx.Msrs.u64ProcCtls3); 1530 1544 1531 1545 hmR3VmxReportEntryCtlsMsr(&pVM->hm.s.ForR3.vmx.Msrs.EntryCtls); -
trunk/src/VBox/VMM/include/CPUMInternal.h
r90914 r91037 115 115 * @{ */ 116 116 /** The current saved state version. */ 117 #define CPUM_SAVED_STATE_VERSION CPUM_SAVED_STATE_VERSION_HWVIRT_VMX 117 #define CPUM_SAVED_STATE_VERSION CPUM_SAVED_STATE_VERSION_HWVIRT_VMX_2 118 /** The saved state version with more virtual VMCS fields and CPUMCTX VMX fields. */ 119 #define CPUM_SAVED_STATE_VERSION_HWVIRT_VMX_2 20 118 120 /** The saved state version including VMX hardware virtualization state. */ 119 121 #define CPUM_SAVED_STATE_VERSION_HWVIRT_VMX 19
Note:
See TracChangeset
for help on using the changeset viewer.

