VirtualBox

Changeset 91301 in vbox for trunk/src/VBox/VMM


Ignore:
Timestamp:
Sep 17, 2021 1:38:24 PM (3 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
146961
Message:

VMM/CPUM,++: Moved the nested VT-X MSR load & store bitmap allocations into CPUMCTX. bugref:10093

Location:
trunk/src/VBox/VMM
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/VMM/VMMAll/CPUMAllRegs.cpp

    r91297 r91301  
    28822882     * Finally, consult the VMREAD/VMWRITE bitmap whether to intercept the instruction or not.
    28832883     */
    2884     uint32_t const u32VmcsField = RT_LO_U32(u64VmcsField);
    2885     uint8_t const *pbBitmap     = uExitReason == VMX_EXIT_VMREAD
    2886                                 ? (uint8_t const *)pVCpu->cpum.s.Guest.hwvirt.vmx.CTX_SUFF(pvVmreadBitmap)
    2887                                 : (uint8_t const *)pVCpu->cpum.s.Guest.hwvirt.vmx.CTX_SUFF(pvVmwriteBitmap);
     2884    uint32_t const        u32VmcsField = RT_LO_U32(u64VmcsField);
     2885    uint8_t const * const pbBitmap     = uExitReason == VMX_EXIT_VMREAD
     2886                                       ? &pVCpu->cpum.s.Guest.hwvirt.vmx.abVmreadBitmap[0]
     2887                                       : &pVCpu->cpum.s.Guest.hwvirt.vmx.abVmwriteBitmap[0];
    28882888    Assert(pbBitmap);
    28892889    Assert(u32VmcsField >> 3 < VMX_V_VMREAD_VMWRITE_BITMAP_SIZE);
    2890     return ASMBitTest(pbBitmap + (u32VmcsField >> 3), u32VmcsField & 7);
     2890    return ASMBitTest(&pbBitmap[u32VmcsField >> 3], u32VmcsField & 7);
    28912891}
    28922892
  • trunk/src/VBox/VMM/VMMAll/IEMAllCImplVmxInstr.cpp.h

    r91298 r91301  
    15761576     * See Intel spec. 24.7.2 "VM-Exit Controls for MSRs".
    15771577     */
    1578     uint32_t const cMsrs = pVmcs->u32ExitMsrStoreCount;
     1578    uint32_t const cMsrs = RT_MIN(pVmcs->u32ExitMsrStoreCount, RT_ELEMENTS(pVCpu->cpum.GstCtx.hwvirt.vmx.aExitMsrStoreArea));
    15791579    if (!cMsrs)
    15801580        return VINF_SUCCESS;
     
    15991599    RTGCPHYS const GCPhysVmExitMsrStoreArea = pVmcs->u64AddrExitMsrStore.u;
    16001600    if (GCPhysVmEntryMsrLoadArea == GCPhysVmExitMsrStoreArea)
    1601         pMsrArea = pVCpu->cpum.GstCtx.hwvirt.vmx.CTX_SUFF(pEntryMsrLoadArea);
     1601        pMsrArea = pVCpu->cpum.GstCtx.hwvirt.vmx.aEntryMsrLoadArea;
    16021602    else
    16031603    {
    1604         int rc = PGMPhysSimpleReadGCPhys(pVCpu->CTX_SUFF(pVM), (void *)pVCpu->cpum.GstCtx.hwvirt.vmx.CTX_SUFF(pExitMsrStoreArea),
     1604        int rc = PGMPhysSimpleReadGCPhys(pVCpu->CTX_SUFF(pVM), &pVCpu->cpum.GstCtx.hwvirt.vmx.aExitMsrStoreArea[0],
    16051605                                         GCPhysVmExitMsrStoreArea, cMsrs * sizeof(VMXAUTOMSR));
    16061606        if (RT_SUCCESS(rc))
    1607             pMsrArea = pVCpu->cpum.GstCtx.hwvirt.vmx.CTX_SUFF(pExitMsrStoreArea);
     1607            pMsrArea = pVCpu->cpum.GstCtx.hwvirt.vmx.aExitMsrStoreArea;
    16081608        else
    16091609        {
     
    16171617     */
    16181618    PVMXAUTOMSR pMsr = pMsrArea;
    1619     Assert(pMsr);
    16201619    for (uint32_t idxMsr = 0; idxMsr < cMsrs; idxMsr++, pMsr++)
    16211620    {
     
    19531952     * See Intel spec. 24.7.2 "VM-Exit Controls for MSRs".
    19541953     */
    1955     uint32_t const cMsrs = pVmcs->u32ExitMsrLoadCount;
     1954    uint32_t const cMsrs = RT_MIN(pVmcs->u32ExitMsrLoadCount, RT_ELEMENTS(pVCpu->cpum.GstCtx.hwvirt.vmx.aExitMsrLoadArea));
    19561955    if (!cMsrs)
    19571956        return VINF_SUCCESS;
     
    19691968
    19701969    RTGCPHYS const GCPhysVmExitMsrLoadArea = pVmcs->u64AddrExitMsrLoad.u;
    1971     int rc = PGMPhysSimpleReadGCPhys(pVCpu->CTX_SUFF(pVM), (void *)pVCpu->cpum.GstCtx.hwvirt.vmx.CTX_SUFF(pExitMsrLoadArea),
     1970    int rc = PGMPhysSimpleReadGCPhys(pVCpu->CTX_SUFF(pVM), &pVCpu->cpum.GstCtx.hwvirt.vmx.aExitMsrLoadArea[0],
    19721971                                     GCPhysVmExitMsrLoadArea, cMsrs * sizeof(VMXAUTOMSR));
    19731972    if (RT_SUCCESS(rc))
    19741973    {
    1975         PCVMXAUTOMSR pMsr = pVCpu->cpum.GstCtx.hwvirt.vmx.CTX_SUFF(pExitMsrLoadArea);
    1976         Assert(pMsr);
     1974        PCVMXAUTOMSR pMsr = pVCpu->cpum.GstCtx.hwvirt.vmx.aExitMsrLoadArea;
    19771975        for (uint32_t idxMsr = 0; idxMsr < cMsrs; idxMsr++, pMsr++)
    19781976        {
     
    64596457     * See Intel spec. 24.8.2 "VM-Entry Controls for MSRs".
    64606458     */
    6461     uint32_t const cMsrs = pVmcs->u32EntryMsrLoadCount;
     6459    uint32_t const cMsrs = RT_MIN(pVmcs->u32EntryMsrLoadCount, RT_ELEMENTS(pVCpu->cpum.GstCtx.hwvirt.vmx.aEntryMsrLoadArea));
    64626460    if (!cMsrs)
    64636461        return VINF_SUCCESS;
     
    64786476
    64796477    RTGCPHYS const GCPhysVmEntryMsrLoadArea = pVmcs->u64AddrEntryMsrLoad.u;
    6480     int rc = PGMPhysSimpleReadGCPhys(pVCpu->CTX_SUFF(pVM), (void *)pVCpu->cpum.GstCtx.hwvirt.vmx.CTX_SUFF(pEntryMsrLoadArea),
     6478    int rc = PGMPhysSimpleReadGCPhys(pVCpu->CTX_SUFF(pVM), &pVCpu->cpum.GstCtx.hwvirt.vmx.aEntryMsrLoadArea[0],
    64816479                                     GCPhysVmEntryMsrLoadArea, cMsrs * sizeof(VMXAUTOMSR));
    64826480    if (RT_SUCCESS(rc))
    64836481    {
    6484         PCVMXAUTOMSR pMsr = pVCpu->cpum.GstCtx.hwvirt.vmx.CTX_SUFF(pEntryMsrLoadArea);
    6485         Assert(pMsr);
     6482        PCVMXAUTOMSR pMsr = &pVCpu->cpum.GstCtx.hwvirt.vmx.aEntryMsrLoadArea[0];
    64866483        for (uint32_t idxMsr = 0; idxMsr < cMsrs; idxMsr++, pMsr++)
    64876484        {
     
    66426639        /* Read the VMREAD-bitmap. */
    66436640        RTGCPHYS const GCPhysVmreadBitmap = pVmcs->u64AddrVmreadBitmap.u;
    6644         Assert(pVCpu->cpum.GstCtx.hwvirt.vmx.CTX_SUFF(pvVmreadBitmap));
    6645         int rc = PGMPhysSimpleReadGCPhys(pVCpu->CTX_SUFF(pVM), pVCpu->cpum.GstCtx.hwvirt.vmx.CTX_SUFF(pvVmreadBitmap),
    6646                                          GCPhysVmreadBitmap, VMX_V_VMREAD_VMWRITE_BITMAP_SIZE);
     6641        int rc = PGMPhysSimpleReadGCPhys(pVCpu->CTX_SUFF(pVM), &pVCpu->cpum.GstCtx.hwvirt.vmx.abVmreadBitmap[0],
     6642                                         GCPhysVmreadBitmap, sizeof(pVCpu->cpum.GstCtx.hwvirt.vmx.abVmreadBitmap));
    66476643        if (RT_SUCCESS(rc))
    66486644        { /* likely */ }
     
    66526648        /* Read the VMWRITE-bitmap. */
    66536649        RTGCPHYS const GCPhysVmwriteBitmap = pVmcs->u64AddrVmwriteBitmap.u;
    6654         Assert(pVCpu->cpum.GstCtx.hwvirt.vmx.CTX_SUFF(pvVmwriteBitmap));
    6655         rc = PGMPhysSimpleReadGCPhys(pVCpu->CTX_SUFF(pVM), pVCpu->cpum.GstCtx.hwvirt.vmx.CTX_SUFF(pvVmwriteBitmap),
    6656                                      GCPhysVmwriteBitmap, VMX_V_VMREAD_VMWRITE_BITMAP_SIZE);
     6650        rc = PGMPhysSimpleReadGCPhys(pVCpu->CTX_SUFF(pVM), &pVCpu->cpum.GstCtx.hwvirt.vmx.abVmwriteBitmap[0],
     6651                                     GCPhysVmwriteBitmap, sizeof(pVCpu->cpum.GstCtx.hwvirt.vmx.abVmwriteBitmap));
    66576652        if (RT_SUCCESS(rc))
    66586653        { /* likely */ }
  • trunk/src/VBox/VMM/VMMR3/CPUM.cpp

    r91298 r91301  
    10671067            pCtx->hwvirt.vmx.pvVirtApicPageR3 = NULL;
    10681068        }
    1069         if (pCtx->hwvirt.vmx.pvVmreadBitmapR3)
    1070         {
    1071             SUPR3ContFree(pCtx->hwvirt.vmx.pvVmreadBitmapR3, VMX_V_VMREAD_VMWRITE_BITMAP_PAGES);
    1072             pCtx->hwvirt.vmx.pvVmreadBitmapR3 = NULL;
    1073         }
    1074         if (pCtx->hwvirt.vmx.pvVmwriteBitmapR3)
    1075         {
    1076             SUPR3ContFree(pCtx->hwvirt.vmx.pvVmwriteBitmapR3, VMX_V_VMREAD_VMWRITE_BITMAP_PAGES);
    1077             pCtx->hwvirt.vmx.pvVmwriteBitmapR3 = NULL;
    1078         }
    1079         if (pCtx->hwvirt.vmx.pEntryMsrLoadAreaR3)
    1080         {
    1081             SUPR3ContFree(pCtx->hwvirt.vmx.pEntryMsrLoadAreaR3, VMX_V_AUTOMSR_AREA_PAGES);
    1082             pCtx->hwvirt.vmx.pEntryMsrLoadAreaR3 = NULL;
    1083         }
    1084         if (pCtx->hwvirt.vmx.pExitMsrStoreAreaR3)
    1085         {
    1086             SUPR3ContFree(pCtx->hwvirt.vmx.pExitMsrStoreAreaR3, VMX_V_AUTOMSR_AREA_PAGES);
    1087             pCtx->hwvirt.vmx.pExitMsrStoreAreaR3 = NULL;
    1088         }
    1089         if (pCtx->hwvirt.vmx.pExitMsrLoadAreaR3)
    1090         {
    1091             SUPR3ContFree(pCtx->hwvirt.vmx.pExitMsrLoadAreaR3, VMX_V_AUTOMSR_AREA_PAGES);
    1092             pCtx->hwvirt.vmx.pExitMsrLoadAreaR3 = NULL;
    1093         }
    10941069        if (pCtx->hwvirt.vmx.pvMsrBitmapR3)
    10951070        {
     
    11331108        AssertCompile(sizeof(pCtx->hwvirt.vmx.ShadowVmcs) == VMX_V_SHADOW_VMCS_PAGES * X86_PAGE_SIZE);
    11341109        AssertCompile(sizeof(pCtx->hwvirt.vmx.ShadowVmcs) == VMX_V_SHADOW_VMCS_SIZE);
     1110        AssertCompile(sizeof(pCtx->hwvirt.vmx.abVmreadBitmap) == VMX_V_VMREAD_VMWRITE_BITMAP_PAGES * X86_PAGE_SIZE);
     1111        AssertCompile(sizeof(pCtx->hwvirt.vmx.abVmreadBitmap) == VMX_V_VMREAD_VMWRITE_BITMAP_SIZE);
     1112        AssertCompile(sizeof(pCtx->hwvirt.vmx.abVmwriteBitmap) == VMX_V_VMREAD_VMWRITE_BITMAP_PAGES * X86_PAGE_SIZE);
     1113        AssertCompile(sizeof(pCtx->hwvirt.vmx.abVmwriteBitmap) == VMX_V_VMREAD_VMWRITE_BITMAP_SIZE);
     1114        AssertCompile(sizeof(pCtx->hwvirt.vmx.aEntryMsrLoadArea) == VMX_V_AUTOMSR_AREA_PAGES * X86_PAGE_SIZE);
     1115        AssertCompile(sizeof(pCtx->hwvirt.vmx.aEntryMsrLoadArea) == VMX_V_AUTOMSR_AREA_SIZE);
     1116        AssertCompile(sizeof(pCtx->hwvirt.vmx.aExitMsrStoreArea) == VMX_V_AUTOMSR_AREA_PAGES * X86_PAGE_SIZE);
     1117        AssertCompile(sizeof(pCtx->hwvirt.vmx.aExitMsrStoreArea) == VMX_V_AUTOMSR_AREA_SIZE);
     1118        AssertCompile(sizeof(pCtx->hwvirt.vmx.aExitMsrLoadArea) == VMX_V_AUTOMSR_AREA_PAGES * X86_PAGE_SIZE);
     1119        AssertCompile(sizeof(pCtx->hwvirt.vmx.aExitMsrLoadArea) == VMX_V_AUTOMSR_AREA_SIZE);
    11351120
    11361121        /*
     
    11501135
    11511136        /*
    1152          * Allocate the VMREAD-bitmap.
    1153          */
    1154         pCtx->hwvirt.vmx.pvVmreadBitmapR3 = SUPR3ContAlloc(VMX_V_VMREAD_VMWRITE_BITMAP_PAGES,
    1155                                                            &pCtx->hwvirt.vmx.pvVmreadBitmapR0, NULL);
    1156         if (pCtx->hwvirt.vmx.pvVmreadBitmapR3)
    1157         { /* likely */ }
    1158         else
    1159         {
    1160             LogRel(("CPUM%u: Failed to alloc %u pages for the nested-guest's VMREAD-bitmap\n", pVCpu->idCpu,
    1161                     VMX_V_VMREAD_VMWRITE_BITMAP_PAGES));
    1162             break;
    1163         }
    1164 
    1165         /*
    1166          * Allocatge the VMWRITE-bitmap.
    1167          */
    1168         pCtx->hwvirt.vmx.pvVmwriteBitmapR3 = SUPR3ContAlloc(VMX_V_VMREAD_VMWRITE_BITMAP_PAGES,
    1169                                                             &pCtx->hwvirt.vmx.pvVmwriteBitmapR0, NULL);
    1170         if (pCtx->hwvirt.vmx.pvVmwriteBitmapR3)
    1171         { /* likely */ }
    1172         else
    1173         {
    1174             LogRel(("CPUM%u: Failed to alloc %u pages for the nested-guest's VMWRITE-bitmap\n", pVCpu->idCpu,
    1175                     VMX_V_VMREAD_VMWRITE_BITMAP_PAGES));
    1176             break;
    1177         }
    1178 
    1179         /*
    1180          * Allocate the VM-entry MSR-load area.
    1181          */
    1182         pCtx->hwvirt.vmx.pEntryMsrLoadAreaR3 = (PVMXAUTOMSR)SUPR3ContAlloc(VMX_V_AUTOMSR_AREA_PAGES,
    1183                                                                            &pCtx->hwvirt.vmx.pEntryMsrLoadAreaR0, NULL);
    1184         if (pCtx->hwvirt.vmx.pEntryMsrLoadAreaR3)
    1185         { /* likely */ }
    1186         else
    1187         {
    1188             LogRel(("CPUM%u: Failed to alloc %u pages for the nested-guest's VM-entry MSR-load area\n", pVCpu->idCpu,
    1189                     VMX_V_AUTOMSR_AREA_PAGES));
    1190             break;
    1191         }
    1192 
    1193         /*
    1194          * Allocate the VM-exit MSR-store area.
    1195          */
    1196         pCtx->hwvirt.vmx.pExitMsrStoreAreaR3 = (PVMXAUTOMSR)SUPR3ContAlloc(VMX_V_AUTOMSR_AREA_PAGES,
    1197                                                                            &pCtx->hwvirt.vmx.pExitMsrStoreAreaR0, NULL);
    1198         if (pCtx->hwvirt.vmx.pExitMsrStoreAreaR3)
    1199         { /* likely */ }
    1200         else
    1201         {
    1202             LogRel(("CPUM%u: Failed to alloc %u pages for the nested-guest's VM-exit MSR-store area\n", pVCpu->idCpu,
    1203                     VMX_V_AUTOMSR_AREA_PAGES));
    1204             break;
    1205         }
    1206 
    1207         /*
    1208          * Allocate the VM-exit MSR-load area.
    1209          */
    1210         pCtx->hwvirt.vmx.pExitMsrLoadAreaR3 = (PVMXAUTOMSR)SUPR3ContAlloc(VMX_V_AUTOMSR_AREA_PAGES,
    1211                                                                           &pCtx->hwvirt.vmx.pExitMsrLoadAreaR0, NULL);
    1212         if (pCtx->hwvirt.vmx.pExitMsrLoadAreaR3)
    1213         { /* likely */ }
    1214         else
    1215         {
    1216             LogRel(("CPUM%u: Failed to alloc %u pages for the nested-guest's VM-exit MSR-load area\n", pVCpu->idCpu,
    1217                     VMX_V_AUTOMSR_AREA_PAGES));
    1218             break;
    1219         }
    1220 
    1221         /*
    12221137         * Allocate the MSR bitmap.
    12231138         */
     
    12511166        RT_ZERO(pCtx->hwvirt.vmx.Vmcs);
    12521167        RT_ZERO(pCtx->hwvirt.vmx.ShadowVmcs);
    1253         memset(pCtx->hwvirt.vmx.CTX_SUFF(pvVirtApicPage),      0, VMX_V_VIRT_APIC_SIZE);
    1254         memset(pCtx->hwvirt.vmx.CTX_SUFF(pvVmreadBitmap),      0, VMX_V_VMREAD_VMWRITE_BITMAP_SIZE);
    1255         memset(pCtx->hwvirt.vmx.CTX_SUFF(pvVmwriteBitmap),     0, VMX_V_VMREAD_VMWRITE_BITMAP_SIZE);
    1256         memset(pCtx->hwvirt.vmx.CTX_SUFF(pEntryMsrLoadArea),   0, VMX_V_AUTOMSR_AREA_SIZE);
    1257         memset(pCtx->hwvirt.vmx.CTX_SUFF(pExitMsrStoreArea),   0, VMX_V_AUTOMSR_AREA_SIZE);
    1258         memset(pCtx->hwvirt.vmx.CTX_SUFF(pExitMsrLoadArea),    0, VMX_V_AUTOMSR_AREA_SIZE);
     1168        RT_ZERO(pCtx->hwvirt.vmx.abVmreadBitmap);
     1169        RT_ZERO(pCtx->hwvirt.vmx.abVmwriteBitmap);
     1170        RT_ZERO(pCtx->hwvirt.vmx.aEntryMsrLoadArea);
     1171        RT_ZERO(pCtx->hwvirt.vmx.aExitMsrStoreArea);
     1172        RT_ZERO(pCtx->hwvirt.vmx.aExitMsrLoadArea);
    12591173        memset(pCtx->hwvirt.vmx.CTX_SUFF(pvMsrBitmap),         0, VMX_V_MSR_BITMAP_SIZE);
    12601174        memset(pCtx->hwvirt.vmx.CTX_SUFF(pvIoBitmap),          0, VMX_V_IO_BITMAP_A_SIZE + VMX_V_IO_BITMAP_B_SIZE);
     1175        memset(pCtx->hwvirt.vmx.CTX_SUFF(pvVirtApicPage),      0, VMX_V_VIRT_APIC_SIZE);
    12611176    }
    12621177
     
    25652480            SSMR3PutStructEx(pSSM, &pGstCtx->hwvirt.vmx.ShadowVmcs, sizeof(pGstCtx->hwvirt.vmx.ShadowVmcs),
    25662481                             0, g_aVmxHwvirtVmcs, NULL);
    2567             SSMR3PutMem(pSSM,      pGstCtx->hwvirt.vmx.pvVmreadBitmapR3, VMX_V_VMREAD_VMWRITE_BITMAP_SIZE);
    2568             SSMR3PutMem(pSSM,      pGstCtx->hwvirt.vmx.pvVmwriteBitmapR3, VMX_V_VMREAD_VMWRITE_BITMAP_SIZE);
    2569             SSMR3PutMem(pSSM,      pGstCtx->hwvirt.vmx.pEntryMsrLoadAreaR3, VMX_V_AUTOMSR_AREA_SIZE);
    2570             SSMR3PutMem(pSSM,      pGstCtx->hwvirt.vmx.pExitMsrStoreAreaR3, VMX_V_AUTOMSR_AREA_SIZE);
    2571             SSMR3PutMem(pSSM,      pGstCtx->hwvirt.vmx.pExitMsrLoadAreaR3,  VMX_V_AUTOMSR_AREA_SIZE);
     2482            SSMR3PutMem(pSSM,     &pGstCtx->hwvirt.vmx.abVmreadBitmap[0],    sizeof(pGstCtx->hwvirt.vmx.abVmreadBitmap));
     2483            SSMR3PutMem(pSSM,     &pGstCtx->hwvirt.vmx.abVmwriteBitmap[0],   sizeof(pGstCtx->hwvirt.vmx.abVmwriteBitmap));
     2484            SSMR3PutMem(pSSM,     &pGstCtx->hwvirt.vmx.aEntryMsrLoadArea[0], sizeof(pGstCtx->hwvirt.vmx.aEntryMsrLoadArea));
     2485            SSMR3PutMem(pSSM,     &pGstCtx->hwvirt.vmx.aExitMsrStoreArea[0], sizeof(pGstCtx->hwvirt.vmx.aExitMsrStoreArea));
     2486            SSMR3PutMem(pSSM,     &pGstCtx->hwvirt.vmx.aExitMsrLoadArea[0],  sizeof(pGstCtx->hwvirt.vmx.aExitMsrLoadArea));
    25722487            SSMR3PutMem(pSSM,      pGstCtx->hwvirt.vmx.pvMsrBitmapR3, VMX_V_MSR_BITMAP_SIZE);
    25732488            SSMR3PutMem(pSSM,      pGstCtx->hwvirt.vmx.pvIoBitmapR3, VMX_V_IO_BITMAP_A_SIZE + VMX_V_IO_BITMAP_B_SIZE);
     
    28552770                        SSMR3GetStructEx(pSSM, &pGstCtx->hwvirt.vmx.ShadowVmcs, sizeof(pGstCtx->hwvirt.vmx.ShadowVmcs),
    28562771                                         0, g_aVmxHwvirtVmcs, NULL);
    2857                         SSMR3GetMem(pSSM,       pGstCtx->hwvirt.vmx.pvVmreadBitmapR3, VMX_V_VMREAD_VMWRITE_BITMAP_SIZE);
    2858                         SSMR3GetMem(pSSM,       pGstCtx->hwvirt.vmx.pvVmwriteBitmapR3, VMX_V_VMREAD_VMWRITE_BITMAP_SIZE);
    2859                         SSMR3GetMem(pSSM,       pGstCtx->hwvirt.vmx.pEntryMsrLoadAreaR3, VMX_V_AUTOMSR_AREA_SIZE);
    2860                         SSMR3GetMem(pSSM,       pGstCtx->hwvirt.vmx.pExitMsrStoreAreaR3, VMX_V_AUTOMSR_AREA_SIZE);
    2861                         SSMR3GetMem(pSSM,       pGstCtx->hwvirt.vmx.pExitMsrLoadAreaR3,  VMX_V_AUTOMSR_AREA_SIZE);
     2772                        SSMR3GetMem(pSSM,      &pGstCtx->hwvirt.vmx.abVmreadBitmap[0],    sizeof(pGstCtx->hwvirt.vmx.abVmreadBitmap));
     2773                        SSMR3GetMem(pSSM,      &pGstCtx->hwvirt.vmx.abVmwriteBitmap[0],   sizeof(pGstCtx->hwvirt.vmx.abVmwriteBitmap));
     2774                        SSMR3GetMem(pSSM,      &pGstCtx->hwvirt.vmx.aEntryMsrLoadArea[0], sizeof(pGstCtx->hwvirt.vmx.aEntryMsrLoadArea));
     2775                        SSMR3GetMem(pSSM,      &pGstCtx->hwvirt.vmx.aExitMsrStoreArea[0], sizeof(pGstCtx->hwvirt.vmx.aExitMsrStoreArea));
     2776                        SSMR3GetMem(pSSM,      &pGstCtx->hwvirt.vmx.aExitMsrLoadArea[0],  sizeof(pGstCtx->hwvirt.vmx.aExitMsrLoadArea));
    28622777                        SSMR3GetMem(pSSM,       pGstCtx->hwvirt.vmx.pvMsrBitmapR3, VMX_V_MSR_BITMAP_SIZE);
    28632778                        SSMR3GetMem(pSSM,       pGstCtx->hwvirt.vmx.pvIoBitmapR3, VMX_V_IO_BITMAP_A_SIZE + VMX_V_IO_BITMAP_B_SIZE);
  • trunk/src/VBox/VMM/include/CPUMInternal.mac

    r91299 r91301  
    230230    .Guest.XState               EQU     .Guest.abXState
    231231
     232;;
    232233    alignb 4096
    233234    .Guest.hwvirt                           resb        0
     
    235236    .Guest.hwvirt.vmx                       resb        0
    236237
    237     .Guest.hwvirt.svm.Vmcb                  resb        4096
    238     .Guest.hwvirt.svm.abMsrBitmap           resb        8192
    239     .Guest.hwvirt.svm.abIoBitmap            resb        12288
    240     .Guest.hwvirt.svm.uMsrHSavePa           resq        1
    241     .Guest.hwvirt.svm.GCPhysVmcb            resq        1
    242     alignb 8
    243     .Guest.hwvirt.svm.HostState             resb        184
    244     .Guest.hwvirt.svm.uPrevPauseTick        resq        1
    245     .Guest.hwvirt.svm.cPauseFilter          resw        1
    246     .Guest.hwvirt.svm.cPauseFilterThreshold resw        1
    247     .Guest.hwvirt.svm.fInterceptEvents      resb        1
    248 
    249     .Guest.hwvirt.vmx.Vmcs                  EQU         (.Guest.hwvirt.vmx )
    250     .Guest.hwvirt.vmx.ShadowVmcs            EQU         (.Guest.hwvirt.vmx + 0x1000)
    251 
    252     ;.unnamed_padding.1 resb 0
     238    .Guest.hwvirt.svm.Vmcb                  EQU         .Guest.hwvirt.svm
     239    .Guest.hwvirt.svm.abMsrBitmap           EQU         (.Guest.hwvirt.svm.Vmcb                   + 0x1000)
     240    .Guest.hwvirt.svm.abIoBitmap            EQU         (.Guest.hwvirt.svm.abMsrBitmap            + 0x2000)
     241    .Guest.hwvirt.svm.uMsrHSavePa           EQU         (.Guest.hwvirt.svm.abIoBitmap             + 0x3000)   ; resq        1
     242    .Guest.hwvirt.svm.GCPhysVmcb            EQU         (.Guest.hwvirt.svm.uMsrHSavePa            + 8)        ; resq        1
     243    alignb 8
     244    .Guest.hwvirt.svm.HostState             EQU         (.Guest.hwvirt.svm.GCPhysVmcb             + 8)        ; resb        184
     245    .Guest.hwvirt.svm.uPrevPauseTick        EQU         (.Guest.hwvirt.svm.HostState              + 184)      ; resq        1
     246    .Guest.hwvirt.svm.cPauseFilter          EQU         (.Guest.hwvirt.svm.uPrevPauseTick         + 8)        ; resw        1
     247    .Guest.hwvirt.svm.cPauseFilterThreshold EQU         (.Guest.hwvirt.svm.cPauseFilter           + 2)        ; resw        1
     248    .Guest.hwvirt.svm.fInterceptEvents      EQU         (.Guest.hwvirt.svm.cPauseFilterThreshold  + 2)        ; resb        1
     249
     250    .Guest.hwvirt.vmx.Vmcs                  resb        0x1000
     251    .Guest.hwvirt.vmx.ShadowVmcs            resb        0x1000
     252    .Guest.hwvirt.vmx.abVmreadBitmap        resb        0x1000
     253    .Guest.hwvirt.vmx.abVmwriteBitmap       resb        0x1000
     254    .Guest.hwvirt.vmx.aEntryMsrLoadArea     resb        0x2000
     255    .Guest.hwvirt.vmx.aExitMsrStoreArea     resb        0x2000
     256    .Guest.hwvirt.vmx.aExitMsrLoadArea      resb        0x2000
     257    alignb 8
     258    .Guest.hwvirt.vmx.GCPhysVmxon           resq        1
     259    .Guest.hwvirt.vmx.GCPhysVmcs            resq        1
     260    .Guest.hwvirt.vmx.GCPhysShadowVmcs      resq        1
     261    .Guest.hwvirt.vmx.enmDiag               resd        1
     262    .Guest.hwvirt.vmx.enmAbort              resd        1
     263    .Guest.hwvirt.vmx.uDiagAux              resq        1
     264    .Guest.hwvirt.vmx.uAbortAux             resd        1
     265    .Guest.hwvirt.vmx.fInVmxRootMode        resb        1
     266    .Guest.hwvirt.vmx.fInVmxNonRootMode     resb        1
     267    .Guest.hwvirt.vmx.fInterceptEvents      resb        1
     268    .Guest.hwvirt.vmx.fNmiUnblockingIret    resb        1
     269    .Guest.hwvirt.vmx.pvVirtApicPageR0      resq        1
     270    .Guest.hwvirt.vmx.pvVirtApicPageR3      resq        1
     271    .Guest.hwvirt.vmx.pvMsrBitmapR0         resq        1
     272    .Guest.hwvirt.vmx.pvMsrBitmapR3         resq        1
     273    .Guest.hwvirt.vmx.pvIoBitmapR0          resq        1
     274    .Guest.hwvirt.vmx.pvIoBitmapR3          resq        1
     275    .Guest.hwvirt.vmx.uFirstPauseLoopTick   resq        1
     276    .Guest.hwvirt.vmx.uPrevPauseTick        resq        1
     277    .Guest.hwvirt.vmx.uEntryTick            resq        1
     278    .Guest.hwvirt.vmx.offVirtApicWrite      resw        1
     279    .Guest.hwvirt.vmx.fVirtNmiBlocking      resb        1
     280    alignb 8
     281    .Guest.hwvirt.vmx.Msrs                  resb        224
     282    .Guest.hwvirt.vmx.HCPhysVirtApicPage    resq        1
     283
    253284    alignb 8
    254285    .Guest.hwvirt.enmHwvirt                 resd        1
  • trunk/src/VBox/VMM/testcase/tstVMStruct.h

    r91298 r91301  
    150150    GEN_CHECK_OFF(CPUMCTX, hwvirt.vmx.pvVirtApicPageR0);
    151151    GEN_CHECK_OFF(CPUMCTX, hwvirt.vmx.pvVirtApicPageR3);
    152     GEN_CHECK_OFF(CPUMCTX, hwvirt.vmx.pvVmreadBitmapR0);
    153     GEN_CHECK_OFF(CPUMCTX, hwvirt.vmx.pvVmreadBitmapR3);
    154     GEN_CHECK_OFF(CPUMCTX, hwvirt.vmx.pvVmwriteBitmapR0);
    155     GEN_CHECK_OFF(CPUMCTX, hwvirt.vmx.pvVmwriteBitmapR3);
    156     GEN_CHECK_OFF(CPUMCTX, hwvirt.vmx.pEntryMsrLoadAreaR0);
    157     GEN_CHECK_OFF(CPUMCTX, hwvirt.vmx.pEntryMsrLoadAreaR3);
    158     GEN_CHECK_OFF(CPUMCTX, hwvirt.vmx.pExitMsrStoreAreaR0);
    159     GEN_CHECK_OFF(CPUMCTX, hwvirt.vmx.pExitMsrStoreAreaR3);
    160     GEN_CHECK_OFF(CPUMCTX, hwvirt.vmx.pExitMsrLoadAreaR0);
    161     GEN_CHECK_OFF(CPUMCTX, hwvirt.vmx.pExitMsrLoadAreaR3);
    162152    GEN_CHECK_OFF(CPUMCTX, hwvirt.vmx.pvMsrBitmapR0);
    163153    GEN_CHECK_OFF(CPUMCTX, hwvirt.vmx.pvMsrBitmapR3);
  • trunk/src/VBox/VMM/testcase/tstVMStructSize.cpp

    r91298 r91301  
    254254    CHECK_MEMBER_ALIGNMENT(VMCPU, cpum.s.Guest.hwvirt.vmx.Vmcs, 4096);
    255255    CHECK_MEMBER_ALIGNMENT(VMCPU, cpum.s.Guest.hwvirt.vmx.ShadowVmcs, 4096);
     256    CHECK_MEMBER_ALIGNMENT(VMCPU, cpum.s.Guest.hwvirt.vmx.abVmreadBitmap, 4096);
     257    CHECK_MEMBER_ALIGNMENT(VMCPU, cpum.s.Guest.hwvirt.vmx.abVmwriteBitmap, 4096);
     258    CHECK_MEMBER_ALIGNMENT(VMCPU, cpum.s.Guest.hwvirt.vmx.aEntryMsrLoadArea, 4096);
     259    CHECK_MEMBER_ALIGNMENT(VMCPU, cpum.s.Guest.hwvirt.vmx.aExitMsrStoreArea, 4096);
     260    CHECK_MEMBER_ALIGNMENT(VMCPU, cpum.s.Guest.hwvirt.vmx.aExitMsrLoadArea, 4096);
    256261
    257262    PVM pVM = NULL; NOREF(pVM);
Note: See TracChangeset for help on using the changeset viewer.

© 2025 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette