Changeset 91298 in vbox
- Timestamp:
- Sep 17, 2021 12:02:38 PM (3 years ago)
- Location:
- trunk
- Files:
-
- 7 edited
-
include/VBox/vmm/cpum.mac (modified) (2 diffs)
-
include/VBox/vmm/cpumctx.h (modified) (3 diffs)
-
src/VBox/VMM/VMMAll/IEMAllCImplVmxInstr.cpp.h (modified) (5 diffs)
-
src/VBox/VMM/VMMR3/CPUM.cpp (modified) (6 diffs)
-
src/VBox/VMM/include/CPUMInternal.mac (modified) (2 diffs)
-
src/VBox/VMM/testcase/tstVMStruct.h (modified) (1 diff)
-
src/VBox/VMM/testcase/tstVMStructSize.cpp (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/include/VBox/vmm/cpum.mac
r91291 r91298 265 265 266 266 alignb 4096 267 .hwvirt resb 0 268 .hwvirt.svm resb 0 269 .hwvirt.vmx resb 0 267 270 .hwvirt.svm.Vmcb resb 4096 268 271 .hwvirt.svm.abMsrBitmap resb 8192 … … 277 280 .hwvirt.svm.fInterceptEvents resb 1 278 281 ;.unnamed_padding.1 resb 0 282 283 .hwvirt.vmx.Vmcs EQU (.hwvirt.vmx ) 284 .hwvirt.vmx.ShadowVmcs EQU (.hwvirt.vmx + 0x1000) 285 279 286 alignb 8 280 287 .hwvirt.enmHwvirt resd 1 -
trunk/include/VBox/vmm/cpumctx.h
r91297 r91298 541 541 /** 0x4000 - The current VMCS. */ 542 542 VMXVVMCS Vmcs; 543 /** 0X5000 - The shadow VMCS. */ 544 VMXVVMCS ShadowVmcs; 543 545 544 546 /** 0x300 - Guest physical address of the VMXON region. */ … … 566 568 * mode before execution of IRET. */ 567 569 bool fNmiUnblockingIret; 568 /** 0X340 - The shadow VMCS - R0 ptr. */569 R0PTRTYPE(PVMXVVMCS) pShadowVmcsR0;570 /** 0x348 - The shadow VMCS - R3 ptr. */571 R3PTRTYPE(PVMXVVMCS) pShadowVmcsR3;572 570 /** 0x350 - The virtual-APIC page - R0 ptr. */ 573 571 R0PTRTYPE(void *) pvVirtApicPageR0; … … 846 844 AssertCompileMemberAlignment(CPUMCTX, hwvirt.CPUM_UNION_NM(s.) svm.abIoBitmap, X86_PAGE_SIZE); 847 845 AssertCompileMemberAlignment(CPUMCTX, hwvirt.CPUM_UNION_NM(s.) vmx.Vmcs, X86_PAGE_SIZE); 848 AssertCompileMemberAlignment(CPUMCTX, hwvirt.CPUM_UNION_NM(s.) vmx. pShadowVmcsR0, 8);846 AssertCompileMemberAlignment(CPUMCTX, hwvirt.CPUM_UNION_NM(s.) vmx.ShadowVmcs, X86_PAGE_SIZE); 849 847 AssertCompileMemberAlignment(CPUMCTX, hwvirt.CPUM_UNION_NM(s.) vmx.pvVmreadBitmapR0, 8); 850 848 AssertCompileMemberAlignment(CPUMCTX, hwvirt.CPUM_UNION_NM(s.) vmx.pvVmwriteBitmapR0, 8); -
trunk/src/VBox/VMM/VMMAll/IEMAllCImplVmxInstr.cpp.h
r91297 r91298 6719 6719 /* Read the VMCS-link pointer from guest memory. */ 6720 6720 RTGCPHYS const GCPhysShadowVmcs = pVmcs->u64VmcsLinkPtr.u; 6721 Assert(pVCpu->cpum.GstCtx.hwvirt.vmx.CTX_SUFF(pShadowVmcs)); 6722 int rc = PGMPhysSimpleReadGCPhys(pVCpu->CTX_SUFF(pVM), pVCpu->cpum.GstCtx.hwvirt.vmx.CTX_SUFF(pShadowVmcs), 6723 GCPhysShadowVmcs, VMX_V_SHADOW_VMCS_SIZE); 6721 int rc = PGMPhysSimpleReadGCPhys(pVCpu->CTX_SUFF(pVM), &pVCpu->cpum.GstCtx.hwvirt.vmx.ShadowVmcs, 6722 GCPhysShadowVmcs, sizeof(pVCpu->cpum.GstCtx.hwvirt.vmx.ShadowVmcs)); 6724 6723 if (RT_SUCCESS(rc)) 6725 6724 { /* likely */ } … … 6731 6730 6732 6731 /* Verify the VMCS revision specified by the guest matches what we reported to the guest. */ 6733 if (pVCpu->cpum.GstCtx.hwvirt.vmx. CTX_SUFF(pShadowVmcs)->u32VmcsRevId.n.u31RevisionId == VMX_V_VMCS_REVISION_ID)6732 if (pVCpu->cpum.GstCtx.hwvirt.vmx.ShadowVmcs.u32VmcsRevId.n.u31RevisionId == VMX_V_VMCS_REVISION_ID) 6734 6733 { /* likely */ } 6735 6734 else … … 6741 6740 /* Verify the shadow bit is set if VMCS shadowing is enabled . */ 6742 6741 if ( !(pVmcs->u32ProcCtls2 & VMX_PROC_CTLS2_VMCS_SHADOWING) 6743 || pVCpu->cpum.GstCtx.hwvirt.vmx. CTX_SUFF(pShadowVmcs)->u32VmcsRevId.n.fIsShadowVmcs)6742 || pVCpu->cpum.GstCtx.hwvirt.vmx.ShadowVmcs.u32VmcsRevId.n.fIsShadowVmcs) 6744 6743 { /* likely */ } 6745 6744 else … … 7592 7591 PCVMXVVMCS pVmcs = !IEM_VMX_IS_NON_ROOT_MODE(pVCpu) 7593 7592 ? &pVCpu->cpum.GstCtx.hwvirt.vmx.Vmcs 7594 : pVCpu->cpum.GstCtx.hwvirt.vmx.CTX_SUFF(pShadowVmcs); 7595 Assert(pVmcs); 7593 : &pVCpu->cpum.GstCtx.hwvirt.vmx.ShadowVmcs; 7596 7594 iemVmxVmreadNoCheck(pVmcs, pu64Dst, u64VmcsField); 7597 7595 return VINF_SUCCESS; … … 7862 7860 PVMXVVMCS pVmcs = !fInVmxNonRootMode 7863 7861 ? &pVCpu->cpum.GstCtx.hwvirt.vmx.Vmcs 7864 : pVCpu->cpum.GstCtx.hwvirt.vmx.CTX_SUFF(pShadowVmcs); 7865 Assert(pVmcs); 7862 : &pVCpu->cpum.GstCtx.hwvirt.vmx.ShadowVmcs; 7866 7863 iemVmxVmwriteNoCheck(pVmcs, u64Val, u64VmcsField); 7867 7864 -
trunk/src/VBox/VMM/VMMR3/CPUM.cpp
r91297 r91298 1062 1062 PCPUMCTX pCtx = &pVCpu->cpum.s.Guest; 1063 1063 1064 if (pCtx->hwvirt.vmx.pShadowVmcsR3)1065 {1066 SUPR3ContFree(pCtx->hwvirt.vmx.pShadowVmcsR3, VMX_V_VMCS_PAGES);1067 pCtx->hwvirt.vmx.pShadowVmcsR3 = NULL;1068 }1069 1064 if (pCtx->hwvirt.vmx.pvVirtApicPageR3) 1070 1065 { … … 1135 1130 1136 1131 AssertCompile(sizeof(pCtx->hwvirt.vmx.Vmcs) == VMX_V_VMCS_PAGES * X86_PAGE_SIZE); 1137 1138 /* 1139 * Allocate the nested-guest shadow VMCS. 1140 */ 1141 pCtx->hwvirt.vmx.pShadowVmcsR3 = (PVMXVVMCS)SUPR3ContAlloc(VMX_V_VMCS_PAGES, &pCtx->hwvirt.vmx.pShadowVmcsR0, NULL); 1142 if (pCtx->hwvirt.vmx.pShadowVmcsR3) 1143 { /* likely */ } 1144 else 1145 { 1146 LogRel(("CPUM%u: Failed to alloc %u pages for the nested-guest's shadow VMCS\n", pVCpu->idCpu, VMX_V_VMCS_PAGES)); 1147 break; 1148 } 1132 AssertCompile(sizeof(pCtx->hwvirt.vmx.Vmcs) == VMX_V_VMCS_SIZE); 1133 AssertCompile(sizeof(pCtx->hwvirt.vmx.ShadowVmcs) == VMX_V_SHADOW_VMCS_PAGES * X86_PAGE_SIZE); 1134 AssertCompile(sizeof(pCtx->hwvirt.vmx.ShadowVmcs) == VMX_V_SHADOW_VMCS_SIZE); 1149 1135 1150 1136 /* … … 1264 1250 */ 1265 1251 RT_ZERO(pCtx->hwvirt.vmx.Vmcs); 1266 memset(pCtx->hwvirt.vmx.CTX_SUFF(pShadowVmcs), 0, VMX_V_SHADOW_VMCS_SIZE);1252 RT_ZERO(pCtx->hwvirt.vmx.ShadowVmcs); 1267 1253 memset(pCtx->hwvirt.vmx.CTX_SUFF(pvVirtApicPage), 0, VMX_V_VIRT_APIC_SIZE); 1268 1254 memset(pCtx->hwvirt.vmx.CTX_SUFF(pvVmreadBitmap), 0, VMX_V_VMREAD_VMWRITE_BITMAP_SIZE); … … 1292 1278 PCPUMCTX pCtx = &pVCpu->cpum.s.Guest; 1293 1279 Assert(pCtx->hwvirt.enmHwvirt == CPUMHWVIRT_VMX); 1294 Assert(pCtx->hwvirt.vmx.CTX_SUFF(pShadowVmcs));1295 1280 1296 1281 RT_ZERO(pCtx->hwvirt.vmx.Vmcs); 1297 memset(pCtx->hwvirt.vmx.CTX_SUFF(pShadowVmcs), 0, VMX_V_SHADOW_VMCS_SIZE);1282 RT_ZERO(pCtx->hwvirt.vmx.ShadowVmcs); 1298 1283 pCtx->hwvirt.vmx.GCPhysVmxon = NIL_RTGCPHYS; 1299 1284 pCtx->hwvirt.vmx.GCPhysShadowVmcs = NIL_RTGCPHYS; … … 2578 2563 SSMR3PutBool(pSSM, pGstCtx->hwvirt.vmx.fNmiUnblockingIret); 2579 2564 SSMR3PutStructEx(pSSM, &pGstCtx->hwvirt.vmx.Vmcs, sizeof(pGstCtx->hwvirt.vmx.Vmcs), 0, g_aVmxHwvirtVmcs, NULL); 2580 SSMR3PutStructEx(pSSM, pGstCtx->hwvirt.vmx.pShadowVmcsR3, sizeof(VMXVVMCS), 0, g_aVmxHwvirtVmcs, NULL); 2565 SSMR3PutStructEx(pSSM, &pGstCtx->hwvirt.vmx.ShadowVmcs, sizeof(pGstCtx->hwvirt.vmx.ShadowVmcs), 2566 0, g_aVmxHwvirtVmcs, NULL); 2581 2567 SSMR3PutMem(pSSM, pGstCtx->hwvirt.vmx.pvVmreadBitmapR3, VMX_V_VMREAD_VMWRITE_BITMAP_SIZE); 2582 2568 SSMR3PutMem(pSSM, pGstCtx->hwvirt.vmx.pvVmwriteBitmapR3, VMX_V_VMREAD_VMWRITE_BITMAP_SIZE); … … 2867 2853 SSMR3GetStructEx(pSSM, &pGstCtx->hwvirt.vmx.Vmcs, sizeof(pGstCtx->hwvirt.vmx.Vmcs), 2868 2854 0, g_aVmxHwvirtVmcs, NULL); 2869 SSMR3GetStructEx(pSSM, pGstCtx->hwvirt.vmx.pShadowVmcsR3, sizeof(VMXVVMCS), 0, g_aVmxHwvirtVmcs, NULL); 2855 SSMR3GetStructEx(pSSM, &pGstCtx->hwvirt.vmx.ShadowVmcs, sizeof(pGstCtx->hwvirt.vmx.ShadowVmcs), 2856 0, g_aVmxHwvirtVmcs, NULL); 2870 2857 SSMR3GetMem(pSSM, pGstCtx->hwvirt.vmx.pvVmreadBitmapR3, VMX_V_VMREAD_VMWRITE_BITMAP_SIZE); 2871 2858 SSMR3GetMem(pSSM, pGstCtx->hwvirt.vmx.pvVmwriteBitmapR3, VMX_V_VMREAD_VMWRITE_BITMAP_SIZE); -
trunk/src/VBox/VMM/include/CPUMInternal.mac
r91297 r91298 231 231 232 232 alignb 4096 233 .Guest.hwvirt resb 0 234 .Guest.hwvirt.svm resb 0 235 .Guest.hwvirt.vmx resb 0 236 233 237 .Guest.hwvirt.svm.Vmcb resb 4096 234 238 .Guest.hwvirt.svm.abMsrBitmap resb 8192 … … 243 247 .Guest.hwvirt.svm.fInterceptEvents resb 1 244 248 245 .Guest.hwvirt.vmx.Vmcs EQU .Guest.hwvirt.svm.Vmcb 249 .Guest.hwvirt.vmx.Vmcs EQU (.Guest.hwvirt.vmx ) 250 .Guest.hwvirt.vmx.ShadowVmcs EQU (.Guest.hwvirt.vmx + 0x1000) 246 251 247 252 ;.unnamed_padding.1 resb 0 -
trunk/src/VBox/VMM/testcase/tstVMStruct.h
r91297 r91298 148 148 GEN_CHECK_OFF(CPUMCTX, hwvirt.vmx.fInterceptEvents); 149 149 GEN_CHECK_OFF(CPUMCTX, hwvirt.vmx.fNmiUnblockingIret); 150 GEN_CHECK_OFF(CPUMCTX, hwvirt.vmx.pShadowVmcsR0);151 GEN_CHECK_OFF(CPUMCTX, hwvirt.vmx.pShadowVmcsR3);152 150 GEN_CHECK_OFF(CPUMCTX, hwvirt.vmx.pvVirtApicPageR0); 153 151 GEN_CHECK_OFF(CPUMCTX, hwvirt.vmx.pvVirtApicPageR3); -
trunk/src/VBox/VMM/testcase/tstVMStructSize.cpp
r91297 r91298 253 253 CHECK_MEMBER_ALIGNMENT(VMCPU, cpum.s.Guest.hwvirt.svm.abIoBitmap, 4096); 254 254 CHECK_MEMBER_ALIGNMENT(VMCPU, cpum.s.Guest.hwvirt.vmx.Vmcs, 4096); 255 CHECK_MEMBER_ALIGNMENT(VMCPU, cpum.s.Guest.hwvirt.vmx.ShadowVmcs, 4096); 255 256 256 257 PVM pVM = NULL; NOREF(pVM);
Note:
See TracChangeset
for help on using the changeset viewer.

