VirtualBox

Changeset 91305 in vbox for trunk/src/VBox/VMM/VMMR3


Ignore:
Timestamp:
Sep 17, 2021 8:56:45 PM (4 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
146965
Message:

VMM/CPUM,++: Moved the nested VT-X I/O permission bitmap allocations into CPUMCTX. bugref:10093

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/VMM/VMMR3/CPUM.cpp

    r91304 r91305  
    10671067            pCtx->hwvirt.vmx.pvVirtApicPageR3 = NULL;
    10681068        }
    1069         if (pCtx->hwvirt.vmx.pvIoBitmapR3)
    1070         {
    1071             SUPR3ContFree(pCtx->hwvirt.vmx.pvIoBitmapR3, VMX_V_IO_BITMAP_A_PAGES + VMX_V_IO_BITMAP_B_PAGES);
    1072             pCtx->hwvirt.vmx.pvIoBitmapR3 = NULL;
    1073         }
    10741069    }
    10751070}
     
    11151110        AssertCompile(sizeof(pCtx->hwvirt.vmx.abMsrBitmap) == VMX_V_MSR_BITMAP_PAGES * X86_PAGE_SIZE);
    11161111        AssertCompile(sizeof(pCtx->hwvirt.vmx.abMsrBitmap) == VMX_V_MSR_BITMAP_SIZE);
     1112        AssertCompile(sizeof(pCtx->hwvirt.vmx.abIoBitmap) == (VMX_V_IO_BITMAP_A_PAGES + VMX_V_IO_BITMAP_B_PAGES) * X86_PAGE_SIZE);
     1113        AssertCompile(sizeof(pCtx->hwvirt.vmx.abIoBitmap) == VMX_V_IO_BITMAP_A_SIZE + VMX_V_IO_BITMAP_B_SIZE);
    11171114
    11181115        /*
     
    11321129
    11331130        /*
    1134          * Allocate the I/O bitmaps (A and B).
    1135          */
    1136         pCtx->hwvirt.vmx.pvIoBitmapR3 = SUPR3ContAlloc(VMX_V_IO_BITMAP_A_PAGES + VMX_V_IO_BITMAP_B_PAGES,
    1137                                                        &pCtx->hwvirt.vmx.pvIoBitmapR0, NULL);
    1138         if (pCtx->hwvirt.vmx.pvIoBitmapR3)
    1139         { /* likely */ }
    1140         else
    1141         {
    1142             LogRel(("CPUM%u: Failed to alloc %u pages for the nested-guest's I/O bitmaps\n", pVCpu->idCpu,
    1143                     VMX_V_IO_BITMAP_A_PAGES + VMX_V_IO_BITMAP_B_PAGES));
    1144             break;
    1145         }
    1146 
    1147         /*
    11481131         * Zero out all allocated pages (should compress well for saved-state).
    11491132         */
    1150         /** @todo this is and always was unnecessary - they are already zeroed. */
     1133        /** @todo r=bird: this is and always was unnecessary - they are already zeroed. */
    11511134        RT_ZERO(pCtx->hwvirt.vmx.Vmcs);
    11521135        RT_ZERO(pCtx->hwvirt.vmx.ShadowVmcs);
     
    11571140        RT_ZERO(pCtx->hwvirt.vmx.aExitMsrLoadArea);
    11581141        RT_ZERO(pCtx->hwvirt.vmx.abMsrBitmap);
    1159         memset(pCtx->hwvirt.vmx.CTX_SUFF(pvIoBitmap),          0, VMX_V_IO_BITMAP_A_SIZE + VMX_V_IO_BITMAP_B_SIZE);
     1142        RT_ZERO(pCtx->hwvirt.vmx.abIoBitmap);
    11601143        memset(pCtx->hwvirt.vmx.CTX_SUFF(pvVirtApicPage),      0, VMX_V_VIRT_APIC_SIZE);
    11611144    }
     
    24712454            SSMR3PutMem(pSSM,     &pGstCtx->hwvirt.vmx.aExitMsrLoadArea[0],  sizeof(pGstCtx->hwvirt.vmx.aExitMsrLoadArea));
    24722455            SSMR3PutMem(pSSM,     &pGstCtx->hwvirt.vmx.abMsrBitmap[0],       sizeof(pGstCtx->hwvirt.vmx.abMsrBitmap));
    2473             SSMR3PutMem(pSSM,      pGstCtx->hwvirt.vmx.pvIoBitmapR3, VMX_V_IO_BITMAP_A_SIZE + VMX_V_IO_BITMAP_B_SIZE);
     2456            SSMR3PutMem(pSSM,     &pGstCtx->hwvirt.vmx.abIoBitmap[0],        sizeof(pGstCtx->hwvirt.vmx.abIoBitmap));
    24742457            SSMR3PutU64(pSSM,      pGstCtx->hwvirt.vmx.uFirstPauseLoopTick);
    24752458            SSMR3PutU64(pSSM,      pGstCtx->hwvirt.vmx.uPrevPauseTick);
     
    27612744                        SSMR3GetMem(pSSM,      &pGstCtx->hwvirt.vmx.aExitMsrLoadArea[0],  sizeof(pGstCtx->hwvirt.vmx.aExitMsrLoadArea));
    27622745                        SSMR3GetMem(pSSM,      &pGstCtx->hwvirt.vmx.abMsrBitmap[0],       sizeof(pGstCtx->hwvirt.vmx.abMsrBitmap));
    2763                         SSMR3GetMem(pSSM,       pGstCtx->hwvirt.vmx.pvIoBitmapR3, VMX_V_IO_BITMAP_A_SIZE + VMX_V_IO_BITMAP_B_SIZE);
     2746                        SSMR3GetMem(pSSM,      &pGstCtx->hwvirt.vmx.abIoBitmap[0],        sizeof(pGstCtx->hwvirt.vmx.abIoBitmap));
    27642747                        SSMR3GetU64(pSSM,      &pGstCtx->hwvirt.vmx.uFirstPauseLoopTick);
    27652748                        SSMR3GetU64(pSSM,      &pGstCtx->hwvirt.vmx.uPrevPauseTick);
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