Changeset 79572 in vbox
- Timestamp:
- Jul 7, 2019 9:22:30 AM (5 years ago)
- Location:
- trunk
- Files:
-
- 4 edited
-
include/VBox/vmm/cpumctx.h (modified) (5 diffs)
-
src/VBox/VMM/VMMAll/HMVMXAll.cpp (modified) (2 diffs)
-
src/VBox/VMM/VMMR3/CPUM.cpp (modified) (6 diffs)
-
src/VBox/VMM/testcase/tstVMStruct.h (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/include/VBox/vmm/cpumctx.h
r78632 r79572 601 601 uint32_t uShadowVmcsR3Padding; 602 602 #endif 603 /** 0x328 - Reserved- R0 ptr. */604 R0PTRTYPE(void *) pv RsvdR0;605 #if HC_ARCH_BITS == 32 606 uint32_t u RsvdR0Padding0;607 #endif 608 /** 0x330 - Reserved- R3 ptr. */609 R3PTRTYPE(void *) pv RsvdR3;610 #if HC_ARCH_BITS == 32 611 uint32_t u RsvdR3Padding0;603 /** 0x328 - The virtual-APIC page - R0 ptr. */ 604 R0PTRTYPE(void *) pvVirtApicPageR0; 605 #if HC_ARCH_BITS == 32 606 uint32_t uVirtApicPageR0Padding; 607 #endif 608 /** 0x330 - The virtual-APIC page - R3 ptr. */ 609 R3PTRTYPE(void *) pvVirtApicPageR3; 610 #if HC_ARCH_BITS == 32 611 uint32_t uVirtApicPageR3Padding; 612 612 #endif 613 613 /** 0x338 - The VMREAD bitmap - R0 ptr. */ … … 692 692 /** 0x3c2 - Whether virtual-NMI blocking is in effect. */ 693 693 bool fVirtNmiBlocking; 694 /** 0x3c3 - Padding. */ 695 uint8_t abPadding0[5]; 694 /** 0x3c3 - Whether the virtual-APIC may have been modified in VMX non-root 695 * operation and we should write to it before VM-exit. */ 696 bool fVirtApicPageDirty; 697 /** 0x3c4 - Padding. */ 698 uint8_t abPadding0[4]; 696 699 /** 0x3c8 - Guest VMX MSRs. */ 697 700 VMXMSRS Msrs; … … 701 704 RTHCPHYS HCPhysShadowVmcs; 702 705 /** 0x4b8 - Host physical address of the virtual-APIC page. */ 703 RTHCPHYS HCPhys Rsvd0;706 RTHCPHYS HCPhysVirtApicPage; 704 707 /** 0x4c0 - Host physical address of the VMREAD bitmap. */ 705 708 RTHCPHYS HCPhysVmreadBitmap; … … 814 817 AssertCompileMemberOffset(CPUMCTX, hwvirt.CPUM_UNION_NM(s.) vmx.pShadowVmcsR0, 0x318); 815 818 AssertCompileMemberOffset(CPUMCTX, hwvirt.CPUM_UNION_NM(s.) vmx.pShadowVmcsR3, 0x320); 819 AssertCompileMemberOffset(CPUMCTX, hwvirt.CPUM_UNION_NM(s.) vmx.pvVirtApicPageR0, 0x328); 820 AssertCompileMemberOffset(CPUMCTX, hwvirt.CPUM_UNION_NM(s.) vmx.pvVirtApicPageR3, 0x330); 816 821 AssertCompileMemberOffset(CPUMCTX, hwvirt.CPUM_UNION_NM(s.) vmx.pvVmreadBitmapR0, 0x338); 817 822 AssertCompileMemberOffset(CPUMCTX, hwvirt.CPUM_UNION_NM(s.) vmx.pvVmreadBitmapR3, 0x340); … … 833 838 AssertCompileMemberOffset(CPUMCTX, hwvirt.CPUM_UNION_NM(s.) vmx.offVirtApicWrite, 0x3c0); 834 839 AssertCompileMemberOffset(CPUMCTX, hwvirt.CPUM_UNION_NM(s.) vmx.fVirtNmiBlocking, 0x3c2); 840 AssertCompileMemberOffset(CPUMCTX, hwvirt.CPUM_UNION_NM(s.) vmx.fVirtApicPageDirty, 0x3c3); 835 841 AssertCompileMemberOffset(CPUMCTX, hwvirt.CPUM_UNION_NM(s.) vmx.Msrs, 0x3c8); 836 842 AssertCompileMemberOffset(CPUMCTX, hwvirt.CPUM_UNION_NM(s.) vmx.HCPhysVmcs, 0x4a8); 837 843 AssertCompileMemberOffset(CPUMCTX, hwvirt.CPUM_UNION_NM(s.) vmx.HCPhysShadowVmcs, 0x4b0); 844 AssertCompileMemberOffset(CPUMCTX, hwvirt.CPUM_UNION_NM(s.) vmx.HCPhysVirtApicPage, 0x4b8); 838 845 AssertCompileMemberOffset(CPUMCTX, hwvirt.CPUM_UNION_NM(s.) vmx.HCPhysVmreadBitmap, 0x4c0); 839 846 AssertCompileMemberOffset(CPUMCTX, hwvirt.CPUM_UNION_NM(s.) vmx.HCPhysVmwriteBitmap, 0x4c8); -
trunk/src/VBox/VMM/VMMAll/HMVMXAll.cpp
r79345 r79572 370 370 VMXV_DIAG_DESC(kVmxVDiag_Vmexit_MsrStorePtrWritePhys , "MsrStorePtrWritePhys" ), 371 371 VMXV_DIAG_DESC(kVmxVDiag_Vmexit_MsrStoreRing3 , "MsrStoreRing3" ), 372 VMXV_DIAG_DESC(kVmxVDiag_Vmexit_MsrStoreRsvd , "MsrStoreRsvd" ) 372 VMXV_DIAG_DESC(kVmxVDiag_Vmexit_MsrStoreRsvd , "MsrStoreRsvd" ), 373 VMXV_DIAG_DESC(kVmxVDiag_Vmexit_VirtApicPagePtrWritePhys , "VirtApicPagePtrWritePhys" ) 373 374 /* kVmxVDiag_End */ 374 375 }; … … 925 926 LogRel(("offVirtApicWrite = %#RX16\n", pCtx->hwvirt.vmx.offVirtApicWrite)); 926 927 LogRel(("fVirtNmiBlocking = %RTbool\n", pCtx->hwvirt.vmx.fVirtNmiBlocking)); 928 LogRel(("fVirtApicPageDirty = %RTbool\n", pCtx->hwvirt.vmx.fVirtApicPageDirty)); 927 929 LogRel(("VMCS cache:\n")); 928 930 -
trunk/src/VBox/VMM/VMMR3/CPUM.cpp
r79528 r79572 1140 1140 pCtx->hwvirt.vmx.pShadowVmcsR3 = NULL; 1141 1141 } 1142 if (pCtx->hwvirt.vmx.pvVirtApicPageR3) 1143 { 1144 SUPR3ContFree(pCtx->hwvirt.vmx.pvVirtApicPageR3, VMX_V_VIRT_APIC_PAGES); 1145 pCtx->hwvirt.vmx.pvVirtApicPageR3 = NULL; 1146 } 1142 1147 if (pCtx->hwvirt.vmx.pvVmreadBitmapR3) 1143 1148 { … … 1231 1236 1232 1237 /* 1238 * Allocate the virtual-APIC page. 1239 */ 1240 pCtx->hwvirt.vmx.pvVirtApicPageR3 = SUPR3ContAlloc(VMX_V_VIRT_APIC_PAGES, 1241 &pCtx->hwvirt.vmx.pvVirtApicPageR0, 1242 &pCtx->hwvirt.vmx.HCPhysVirtApicPage); 1243 if (pCtx->hwvirt.vmx.pvVirtApicPageR3) 1244 { /* likely */ } 1245 else 1246 { 1247 LogRel(("CPUM%u: Failed to alloc %u pages for the nested-guest's virtual-APIC page\n", pVCpu->idCpu, 1248 VMX_V_VIRT_APIC_PAGES)); 1249 break; 1250 } 1251 1252 /* 1233 1253 * Allocate the VMREAD-bitmap. 1234 1254 */ … … 1340 1360 memset(pCtx->hwvirt.vmx.CTX_SUFF(pVmcs), 0, VMX_V_VMCS_SIZE); 1341 1361 memset(pCtx->hwvirt.vmx.CTX_SUFF(pShadowVmcs), 0, VMX_V_SHADOW_VMCS_SIZE); 1362 memset(pCtx->hwvirt.vmx.CTX_SUFF(pvVirtApicPage), 0, VMX_V_VIRT_APIC_SIZE); 1342 1363 memset(pCtx->hwvirt.vmx.CTX_SUFF(pvVmreadBitmap), 0, VMX_V_VMREAD_VMWRITE_BITMAP_SIZE); 1343 1364 memset(pCtx->hwvirt.vmx.CTX_SUFF(pvVmwriteBitmap), 0, VMX_V_VMREAD_VMWRITE_BITMAP_SIZE); … … 2627 2648 SSMR3PutU16(pSSM, pGstCtx->hwvirt.vmx.offVirtApicWrite); 2628 2649 SSMR3PutBool(pSSM, pGstCtx->hwvirt.vmx.fVirtNmiBlocking); 2650 SSMR3PutBool(pSSM, pGstCtx->hwvirt.vmx.fVirtApicPageDirty); 2629 2651 SSMR3PutU64(pSSM, pGstCtx->hwvirt.vmx.Msrs.u64FeatCtrl); 2630 2652 SSMR3PutU64(pSSM, pGstCtx->hwvirt.vmx.Msrs.u64Basic); … … 2918 2940 SSMR3GetU16(pSSM, &pGstCtx->hwvirt.vmx.offVirtApicWrite); 2919 2941 SSMR3GetBool(pSSM, &pGstCtx->hwvirt.vmx.fVirtNmiBlocking); 2942 SSMR3GetBool(pSSM, &pGstCtx->hwvirt.vmx.fVirtApicPageDirty); 2920 2943 SSMR3GetU64(pSSM, &pGstCtx->hwvirt.vmx.Msrs.u64FeatCtrl); 2921 2944 SSMR3GetU64(pSSM, &pGstCtx->hwvirt.vmx.Msrs.u64Basic); … … 4109 4132 pHlp->pfnPrintf(pHlp, " offVirtApicWrite = %#RX16\n", pCtx->hwvirt.vmx.offVirtApicWrite); 4110 4133 pHlp->pfnPrintf(pHlp, " fVirtNmiBlocking = %RTbool\n", pCtx->hwvirt.vmx.fVirtNmiBlocking); 4134 pHlp->pfnPrintf(pHlp, " fVirtApicPageDirty = %RTbool\n", pCtx->hwvirt.vmx.fVirtApicPageDirty); 4111 4135 pHlp->pfnPrintf(pHlp, " VMCS cache:\n"); 4112 4136 cpumR3InfoVmxVmcs(pHlp, pCtx->hwvirt.vmx.pVmcsR3, " " /* pszPrefix */); -
trunk/src/VBox/VMM/testcase/tstVMStruct.h
r78220 r79572 159 159 GEN_CHECK_OFF(CPUMCTX, hwvirt.vmx.pShadowVmcsR0); 160 160 GEN_CHECK_OFF(CPUMCTX, hwvirt.vmx.pShadowVmcsR3); 161 GEN_CHECK_OFF(CPUMCTX, hwvirt.vmx.pvVirtApicPageR0); 162 GEN_CHECK_OFF(CPUMCTX, hwvirt.vmx.pvVirtApicPageR3); 161 163 GEN_CHECK_OFF(CPUMCTX, hwvirt.vmx.pvVmreadBitmapR0); 162 164 GEN_CHECK_OFF(CPUMCTX, hwvirt.vmx.pvVmreadBitmapR3); … … 178 180 GEN_CHECK_OFF(CPUMCTX, hwvirt.vmx.offVirtApicWrite); 179 181 GEN_CHECK_OFF(CPUMCTX, hwvirt.vmx.fVirtNmiBlocking); 182 GEN_CHECK_OFF(CPUMCTX, hwvirt.vmx.fVirtApicPageDirty); 180 183 GEN_CHECK_OFF(CPUMCTX, hwvirt.vmx.Msrs); 181 184 GEN_CHECK_OFF(CPUMCTX, hwvirt.vmx.HCPhysVmcs);
Note:
See TracChangeset
for help on using the changeset viewer.

