VirtualBox

Changeset 77563 in vbox for trunk/src/VBox


Ignore:
Timestamp:
Mar 5, 2019 5:47:43 AM (6 years ago)
Author:
vboxsync
Message:

VMM/HM: Nested VMX: bugref:9180 Rename GstCtls as Ctls for upcoming changes.

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

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/VMM/VMMR0/HMVMXR0.cpp

    r77493 r77563  
    13051305
    13061306        /* Now that we're swapping MSRs during the world-switch, allow the guest to read/write them without causing VM-exits. */
    1307         if (pVCpu->hm.s.vmx.GstCtls.u32ProcCtls & VMX_PROC_CTLS_USE_MSR_BITMAPS)
     1307        if (pVCpu->hm.s.vmx.Ctls.u32ProcCtls & VMX_PROC_CTLS_USE_MSR_BITMAPS)
    13081308            hmR0VmxSetMsrPermission(pVCpu, uMsr, VMXMSREXIT_PASSTHRU_READ, VMXMSREXIT_PASSTHRU_WRITE);
    13091309
     
    13891389
    13901390        /* We're no longer swapping MSRs during the world-switch, intercept guest read/writes to them. */
    1391         if (pVCpu->hm.s.vmx.GstCtls.u32ProcCtls & VMX_PROC_CTLS_USE_MSR_BITMAPS)
     1391        if (pVCpu->hm.s.vmx.Ctls.u32ProcCtls & VMX_PROC_CTLS_USE_MSR_BITMAPS)
    13921392            hmR0VmxSetMsrPermission(pVCpu, uMsr, VMXMSREXIT_INTERCEPT_READ, VMXMSREXIT_INTERCEPT_WRITE);
    13931393
     
    16221622    int rc = VMXReadVmcs32(VMX_VMCS32_CTRL_ENTRY, &u32Val);
    16231623    AssertRCReturn(rc, rc);
    1624     AssertMsgReturnStmt(pVCpu->hm.s.vmx.GstCtls.u32EntryCtls == u32Val,
    1625                         ("Cache=%#RX32 VMCS=%#RX32\n", pVCpu->hm.s.vmx.GstCtls.u32EntryCtls, u32Val),
     1624    AssertMsgReturnStmt(pVCpu->hm.s.vmx.Ctls.u32EntryCtls == u32Val,
     1625                        ("Cache=%#RX32 VMCS=%#RX32\n", pVCpu->hm.s.vmx.Ctls.u32EntryCtls, u32Val),
    16261626                        pVCpu->hm.s.u32HMError = VMX_VCI_CTRL_ENTRY,
    16271627                        VERR_VMX_VMCS_FIELD_CACHE_INVALID);
     
    16291629    rc = VMXReadVmcs32(VMX_VMCS32_CTRL_EXIT, &u32Val);
    16301630    AssertRCReturn(rc, rc);
    1631     AssertMsgReturnStmt(pVCpu->hm.s.vmx.GstCtls.u32ExitCtls == u32Val,
    1632                         ("Cache=%#RX32 VMCS=%#RX32\n", pVCpu->hm.s.vmx.GstCtls.u32ExitCtls, u32Val),
     1631    AssertMsgReturnStmt(pVCpu->hm.s.vmx.Ctls.u32ExitCtls == u32Val,
     1632                        ("Cache=%#RX32 VMCS=%#RX32\n", pVCpu->hm.s.vmx.Ctls.u32ExitCtls, u32Val),
    16331633                        pVCpu->hm.s.u32HMError = VMX_VCI_CTRL_EXIT,
    16341634                        VERR_VMX_VMCS_FIELD_CACHE_INVALID);
     
    16361636    rc = VMXReadVmcs32(VMX_VMCS32_CTRL_PIN_EXEC, &u32Val);
    16371637    AssertRCReturn(rc, rc);
    1638     AssertMsgReturnStmt(pVCpu->hm.s.vmx.GstCtls.u32PinCtls == u32Val,
    1639                         ("Cache=%#RX32 VMCS=%#RX32\n", pVCpu->hm.s.vmx.GstCtls.u32PinCtls, u32Val),
     1638    AssertMsgReturnStmt(pVCpu->hm.s.vmx.Ctls.u32PinCtls == u32Val,
     1639                        ("Cache=%#RX32 VMCS=%#RX32\n", pVCpu->hm.s.vmx.Ctls.u32PinCtls, u32Val),
    16401640                        pVCpu->hm.s.u32HMError = VMX_VCI_CTRL_PIN_EXEC,
    16411641                        VERR_VMX_VMCS_FIELD_CACHE_INVALID);
     
    16431643    rc = VMXReadVmcs32(VMX_VMCS32_CTRL_PROC_EXEC, &u32Val);
    16441644    AssertRCReturn(rc, rc);
    1645     AssertMsgReturnStmt(pVCpu->hm.s.vmx.GstCtls.u32ProcCtls == u32Val,
    1646                         ("Cache=%#RX32 VMCS=%#RX32\n", pVCpu->hm.s.vmx.GstCtls.u32ProcCtls, u32Val),
     1645    AssertMsgReturnStmt(pVCpu->hm.s.vmx.Ctls.u32ProcCtls == u32Val,
     1646                        ("Cache=%#RX32 VMCS=%#RX32\n", pVCpu->hm.s.vmx.Ctls.u32ProcCtls, u32Val),
    16471647                        pVCpu->hm.s.u32HMError = VMX_VCI_CTRL_PROC_EXEC,
    16481648                        VERR_VMX_VMCS_FIELD_CACHE_INVALID);
    16491649
    1650     if (pVCpu->hm.s.vmx.GstCtls.u32ProcCtls & VMX_PROC_CTLS_USE_SECONDARY_CTLS)
     1650    if (pVCpu->hm.s.vmx.Ctls.u32ProcCtls & VMX_PROC_CTLS_USE_SECONDARY_CTLS)
    16511651    {
    16521652        rc = VMXReadVmcs32(VMX_VMCS32_CTRL_PROC_EXEC2, &u32Val);
    16531653        AssertRCReturn(rc, rc);
    1654         AssertMsgReturnStmt(pVCpu->hm.s.vmx.GstCtls.u32ProcCtls2 == u32Val,
    1655                             ("Cache=%#RX32 VMCS=%#RX32\n", pVCpu->hm.s.vmx.GstCtls.u32ProcCtls2, u32Val),
     1654        AssertMsgReturnStmt(pVCpu->hm.s.vmx.Ctls.u32ProcCtls2 == u32Val,
     1655                            ("Cache=%#RX32 VMCS=%#RX32\n", pVCpu->hm.s.vmx.Ctls.u32ProcCtls2, u32Val),
    16561656                            pVCpu->hm.s.u32HMError = VMX_VCI_CTRL_PROC_EXEC2,
    16571657                            VERR_VMX_VMCS_FIELD_CACHE_INVALID);
     
    16601660    rc = VMXReadVmcs32(VMX_VMCS32_CTRL_EXCEPTION_BITMAP, &u32Val);
    16611661    AssertRCReturn(rc, rc);
    1662     AssertMsgReturnStmt(pVCpu->hm.s.vmx.GstCtls.u32XcptBitmap == u32Val,
    1663                         ("Cache=%#RX32 VMCS=%#RX32\n", pVCpu->hm.s.vmx.GstCtls.u32XcptBitmap, u32Val),
     1662    AssertMsgReturnStmt(pVCpu->hm.s.vmx.Ctls.u32XcptBitmap == u32Val,
     1663                        ("Cache=%#RX32 VMCS=%#RX32\n", pVCpu->hm.s.vmx.Ctls.u32XcptBitmap, u32Val),
    16641664                        pVCpu->hm.s.u32HMError = VMX_VCI_CTRL_XCPT_BITMAP,
    16651665                        VERR_VMX_VMCS_FIELD_CACHE_INVALID);
     
    16681668    rc = VMXReadVmcs64(VMX_VMCS64_CTRL_TSC_OFFSET_FULL, &u64Val);
    16691669    AssertRCReturn(rc, rc);
    1670     AssertMsgReturnStmt(pVCpu->hm.s.vmx.GstCtls.u64TscOffset == u64Val,
    1671                         ("Cache=%#RX64 VMCS=%#RX64\n", pVCpu->hm.s.vmx.GstCtls.u64TscOffset, u64Val),
     1670    AssertMsgReturnStmt(pVCpu->hm.s.vmx.Ctls.u64TscOffset == u64Val,
     1671                        ("Cache=%#RX64 VMCS=%#RX64\n", pVCpu->hm.s.vmx.Ctls.u64TscOffset, u64Val),
    16721672                        pVCpu->hm.s.u32HMError = VMX_VCI_CTRL_TSC_OFFSET,
    16731673                        VERR_VMX_VMCS_FIELD_CACHE_INVALID);
     
    16881688    Assert(!RTThreadPreemptIsEnabled(NIL_RTTHREAD));
    16891689
    1690     if (pVCpu->hm.s.vmx.GstCtls.u32ExitCtls & VMX_EXIT_CTLS_LOAD_EFER_MSR)
     1690    if (pVCpu->hm.s.vmx.Ctls.u32ExitCtls & VMX_EXIT_CTLS_LOAD_EFER_MSR)
    16911691    {
    16921692        uint64_t u64Val;
     
    17341734
    17351735        /* Verify that the permissions are as expected in the MSR bitmap. */
    1736         if (pVCpu->hm.s.vmx.GstCtls.u32ProcCtls & VMX_PROC_CTLS_USE_MSR_BITMAPS)
     1736        if (pVCpu->hm.s.vmx.Ctls.u32ProcCtls & VMX_PROC_CTLS_USE_MSR_BITMAPS)
    17371737        {
    17381738            VMXMSREXITREAD  enmRead;
     
    23252325    int rc = VMXWriteVmcs32(VMX_VMCS32_CTRL_PIN_EXEC, fVal);
    23262326    AssertRCReturn(rc, rc);
    2327     pVCpu->hm.s.vmx.GstCtls.u32PinCtls = fVal;
     2327    pVCpu->hm.s.vmx.Ctls.u32PinCtls = fVal;
    23282328
    23292329    return VINF_SUCCESS;
     
    24222422    int rc = VMXWriteVmcs32(VMX_VMCS32_CTRL_PROC_EXEC2, fVal);
    24232423    AssertRCReturn(rc, rc);
    2424     pVCpu->hm.s.vmx.GstCtls.u32ProcCtls2 = fVal;
     2424    pVCpu->hm.s.vmx.Ctls.u32ProcCtls2 = fVal;
    24252425
    24262426    return VINF_SUCCESS;
     
    25562556    int rc = VMXWriteVmcs32(VMX_VMCS32_CTRL_PROC_EXEC, fVal);
    25572557    AssertRCReturn(rc, rc);
    2558     pVCpu->hm.s.vmx.GstCtls.u32ProcCtls = fVal;
     2558    pVCpu->hm.s.vmx.Ctls.u32ProcCtls = fVal;
    25592559
    25602560    /* Set up secondary processor-based VM-execution controls if the CPU supports it. */
    2561     if (pVCpu->hm.s.vmx.GstCtls.u32ProcCtls & VMX_PROC_CTLS_USE_SECONDARY_CTLS)
     2561    if (pVCpu->hm.s.vmx.Ctls.u32ProcCtls & VMX_PROC_CTLS_USE_SECONDARY_CTLS)
    25622562        return hmR0VmxSetupProcCtls2(pVCpu);
    25632563
     
    26742674
    26752675    /* Update our cache of the exception bitmap. */
    2676     pVCpu->hm.s.vmx.GstCtls.u32XcptBitmap = uXcptBitmap;
     2676    pVCpu->hm.s.vmx.Ctls.u32XcptBitmap = uXcptBitmap;
    26772677    return VINF_SUCCESS;
    26782678}
     
    29592959    /* Assertion is right but we would not have updated u32ExitCtls yet. */
    29602960#if 0
    2961     if (!(pVCpu->hm.s.vmx.GstCtls.u32ExitCtls & VMX_EXIT_CTLS_HOST_ADDR_SPACE_SIZE))
     2961    if (!(pVCpu->hm.s.vmx.Ctls.u32ExitCtls & VMX_EXIT_CTLS_HOST_ADDR_SPACE_SIZE))
    29622962        Assert(uSelSS != 0);
    29632963#endif
     
    32713271
    32723272        /* Commit it to the VMCS and update our cache. */
    3273         if (pVCpu->hm.s.vmx.GstCtls.u32EntryCtls != fVal)
     3273        if (pVCpu->hm.s.vmx.Ctls.u32EntryCtls != fVal)
    32743274        {
    32753275            int rc = VMXWriteVmcs32(VMX_VMCS32_CTRL_ENTRY, fVal);
    32763276            AssertRCReturn(rc, rc);
    3277             pVCpu->hm.s.vmx.GstCtls.u32EntryCtls = fVal;
     3277            pVCpu->hm.s.vmx.Ctls.u32EntryCtls = fVal;
    32783278        }
    32793279
     
    33553355
    33563356        /* Commit it to the VMCS and update our cache. */
    3357         if (pVCpu->hm.s.vmx.GstCtls.u32ExitCtls != fVal)
     3357        if (pVCpu->hm.s.vmx.Ctls.u32ExitCtls != fVal)
    33583358        {
    33593359            int rc = VMXWriteVmcs32(VMX_VMCS32_CTRL_EXIT, fVal);
    33603360            AssertRCReturn(rc, rc);
    3361             pVCpu->hm.s.vmx.GstCtls.u32ExitCtls = fVal;
     3361            pVCpu->hm.s.vmx.Ctls.u32ExitCtls = fVal;
    33623362        }
    33633363
     
    33783378{
    33793379    Assert(!(u32TprThreshold & ~VMX_TPR_THRESHOLD_MASK));         /* Bits 31:4 MBZ. */
    3380     Assert(pVCpu->hm.s.vmx.GstCtls.u32ProcCtls & VMX_PROC_CTLS_USE_TPR_SHADOW); RT_NOREF_PV(pVCpu);
     3380    Assert(pVCpu->hm.s.vmx.Ctls.u32ProcCtls & VMX_PROC_CTLS_USE_TPR_SHADOW); RT_NOREF_PV(pVCpu);
    33813381    return VMXWriteVmcs32(VMX_VMCS32_CTRL_TPR_THRESHOLD, u32TprThreshold);
    33823382}
     
    34033403             * Setup TPR shadowing.
    34043404             */
    3405             if (pVCpu->hm.s.vmx.GstCtls.u32ProcCtls & VMX_PROC_CTLS_USE_TPR_SHADOW)
     3405            if (pVCpu->hm.s.vmx.Ctls.u32ProcCtls & VMX_PROC_CTLS_USE_TPR_SHADOW)
    34063406            {
    34073407                Assert(pVCpu->hm.s.vmx.HCPhysVirtApic);
     
    34903490     */
    34913491    if (   VMCPU_FF_IS_SET(pVCpu, VMCPU_FF_BLOCK_NMIS)
    3492         && (pVCpu->hm.s.vmx.GstCtls.u32PinCtls & VMX_PIN_CTLS_VIRT_NMI))
     3492        && (pVCpu->hm.s.vmx.Ctls.u32PinCtls & VMX_PIN_CTLS_VIRT_NMI))
    34933493    {
    34943494        fIntrState |= VMX_VMCS_GUEST_INT_STATE_BLOCK_NMI;
     
    35113511    if (ASMAtomicUoReadU64(&pVCpu->hm.s.fCtxChanged) & HM_CHANGED_VMX_GUEST_XCPT_INTERCEPTS)
    35123512    {
    3513         uint32_t uXcptBitmap = pVCpu->hm.s.vmx.GstCtls.u32XcptBitmap;
     3513        uint32_t uXcptBitmap = pVCpu->hm.s.vmx.Ctls.u32XcptBitmap;
    35143514
    35153515        /* The remaining exception intercepts are handled elsewhere, e.g. in hmR0VmxExportGuestCR0(). */
     
    35243524        Assert(uXcptBitmap & RT_BIT_32(X86_XCPT_DB));
    35253525
    3526         if (uXcptBitmap != pVCpu->hm.s.vmx.GstCtls.u32XcptBitmap)
     3526        if (uXcptBitmap != pVCpu->hm.s.vmx.Ctls.u32XcptBitmap)
    35273527        {
    35283528            int rc = VMXWriteVmcs32(VMX_VMCS32_CTRL_EXCEPTION_BITMAP, uXcptBitmap);
    35293529            AssertRCReturn(rc, rc);
    3530             pVCpu->hm.s.vmx.GstCtls.u32XcptBitmap = uXcptBitmap;
     3530            pVCpu->hm.s.vmx.Ctls.u32XcptBitmap = uXcptBitmap;
    35313531        }
    35323532
     
    36723672         * Minimize VM-exits due to CR3 changes when we have NestedPaging.
    36733673         */
    3674         uint32_t uProcCtls = pVCpu->hm.s.vmx.GstCtls.u32ProcCtls;
     3674        uint32_t uProcCtls = pVCpu->hm.s.vmx.Ctls.u32ProcCtls;
    36753675        if (pVM->hm.s.fNestedPaging)
    36763676        {
     
    37153715         * Update exception intercepts.
    37163716         */
    3717         uint32_t uXcptBitmap = pVCpu->hm.s.vmx.GstCtls.u32XcptBitmap;
     3717        uint32_t uXcptBitmap = pVCpu->hm.s.vmx.Ctls.u32XcptBitmap;
    37183718        if (pVCpu->hm.s.vmx.RealMode.fRealOnV86Active)
    37193719        {
     
    37903790        int rc = VMXWriteVmcs32(VMX_VMCS_GUEST_CR0, u32GuestCr0);
    37913791        rc    |= VMXWriteVmcs32(VMX_VMCS_CTRL_CR0_READ_SHADOW, u32ShadowCr0);
    3792         if (u32Cr0Mask != pVCpu->hm.s.vmx.GstCtls.u32Cr0Mask)
     3792        if (u32Cr0Mask != pVCpu->hm.s.vmx.Ctls.u32Cr0Mask)
    37933793            rc |= VMXWriteVmcs32(VMX_VMCS_CTRL_CR0_MASK, u32Cr0Mask);
    3794         if (uProcCtls != pVCpu->hm.s.vmx.GstCtls.u32ProcCtls)
     3794        if (uProcCtls != pVCpu->hm.s.vmx.Ctls.u32ProcCtls)
    37953795            rc |= VMXWriteVmcs32(VMX_VMCS32_CTRL_PROC_EXEC, uProcCtls);
    3796         if (uXcptBitmap != pVCpu->hm.s.vmx.GstCtls.u32XcptBitmap)
     3796        if (uXcptBitmap != pVCpu->hm.s.vmx.Ctls.u32XcptBitmap)
    37973797            rc |= VMXWriteVmcs32(VMX_VMCS32_CTRL_EXCEPTION_BITMAP, uXcptBitmap);
    37983798        AssertRCReturn(rc, rc);
    37993799
    38003800        /* Update our caches. */
    3801         pVCpu->hm.s.vmx.GstCtls.u32Cr0Mask    = u32Cr0Mask;
    3802         pVCpu->hm.s.vmx.GstCtls.u32ProcCtls   = uProcCtls;
    3803         pVCpu->hm.s.vmx.GstCtls.u32XcptBitmap = uXcptBitmap;
     3801        pVCpu->hm.s.vmx.Ctls.u32Cr0Mask    = u32Cr0Mask;
     3802        pVCpu->hm.s.vmx.Ctls.u32ProcCtls   = uProcCtls;
     3803        pVCpu->hm.s.vmx.Ctls.u32XcptBitmap = uXcptBitmap;
    38043804
    38053805        ASMAtomicUoAndU64(&pVCpu->hm.s.fCtxChanged, ~HM_CHANGED_GUEST_CR0);
     
    40314031        rc  = VMXWriteVmcs32(VMX_VMCS_GUEST_CR4, u32GuestCr4);
    40324032        rc |= VMXWriteVmcs32(VMX_VMCS_CTRL_CR4_READ_SHADOW, u32ShadowCr4);
    4033         if (pVCpu->hm.s.vmx.GstCtls.u32Cr4Mask != u32Cr4Mask)
     4033        if (pVCpu->hm.s.vmx.Ctls.u32Cr4Mask != u32Cr4Mask)
    40344034            rc |= VMXWriteVmcs32(VMX_VMCS_CTRL_CR4_MASK, u32Cr4Mask);
    40354035        AssertRCReturn(rc, rc);
    4036         pVCpu->hm.s.vmx.GstCtls.u32Cr4Mask = u32Cr4Mask;
     4036        pVCpu->hm.s.vmx.Ctls.u32Cr4Mask = u32Cr4Mask;
    40374037
    40384038        /* Whether to save/load/restore XCR0 during world switch depends on CR4.OSXSAVE and host+guest XCR0. */
     
    40654065#ifdef VBOX_STRICT
    40664066    /* Validate. Intel spec. 26.3.1.1 "Checks on Guest Controls Registers, Debug Registers, MSRs" */
    4067     if (pVCpu->hm.s.vmx.GstCtls.u32EntryCtls & VMX_ENTRY_CTLS_LOAD_DEBUG)
     4067    if (pVCpu->hm.s.vmx.Ctls.u32EntryCtls & VMX_ENTRY_CTLS_LOAD_DEBUG)
    40684068    {
    40694069        /* Validate. Intel spec. 17.2 "Debug Registers", recompiler paranoia checks. */
     
    40754075    bool     fSteppingDB      = false;
    40764076    bool     fInterceptMovDRx = false;
    4077     uint32_t uProcCtls        = pVCpu->hm.s.vmx.GstCtls.u32ProcCtls;
     4077    uint32_t uProcCtls        = pVCpu->hm.s.vmx.Ctls.u32ProcCtls;
    40784078    if (pVCpu->hm.s.fSingleInstruction)
    40794079    {
     
    41854185     * monitor-trap flag and update our cache.
    41864186     */
    4187     if (uProcCtls != pVCpu->hm.s.vmx.GstCtls.u32ProcCtls)
     4187    if (uProcCtls != pVCpu->hm.s.vmx.Ctls.u32ProcCtls)
    41884188    {
    41894189        int rc2 = VMXWriteVmcs32(VMX_VMCS32_CTRL_PROC_EXEC, uProcCtls);
    41904190        AssertRCReturn(rc2, rc2);
    4191         pVCpu->hm.s.vmx.GstCtls.u32ProcCtls = uProcCtls;
     4191        pVCpu->hm.s.vmx.Ctls.u32ProcCtls = uProcCtls;
    41924192    }
    41934193
     
    50495049                rc = VMXReadVmcs32(VMX_VMCS32_CTRL_PROC_EXEC, &u32Val);                 AssertRC(rc);
    50505050                Log4(("VMX_VMCS32_CTRL_PROC_EXEC               %#RX32\n", u32Val));
    5051                 if (pVCpu->hm.s.vmx.GstCtls.u32ProcCtls & VMX_PROC_CTLS_USE_SECONDARY_CTLS)
     5051                if (pVCpu->hm.s.vmx.Ctls.u32ProcCtls & VMX_PROC_CTLS_USE_SECONDARY_CTLS)
    50525052                {
    50535053                    rc = VMXReadVmcs32(VMX_VMCS32_CTRL_PROC_EXEC2, &u32Val);            AssertRC(rc);
     
    56805680    }
    56815681
    5682     uint32_t uProcCtls = pVCpu->hm.s.vmx.GstCtls.u32ProcCtls;
     5682    uint32_t uProcCtls = pVCpu->hm.s.vmx.Ctls.u32ProcCtls;
    56835683    if (   fOffsettedTsc
    56845684        && RT_LIKELY(!pVCpu->hm.s.fDebugWantRdTscExit))
    56855685    {
    5686         if (pVCpu->hm.s.vmx.GstCtls.u64TscOffset != uTscOffset)
     5686        if (pVCpu->hm.s.vmx.Ctls.u64TscOffset != uTscOffset)
    56875687        {
    56885688            int rc = VMXWriteVmcs64(VMX_VMCS64_CTRL_TSC_OFFSET_FULL, uTscOffset);
    56895689            AssertRC(rc);
    5690             pVCpu->hm.s.vmx.GstCtls.u64TscOffset = uTscOffset;
     5690            pVCpu->hm.s.vmx.Ctls.u64TscOffset = uTscOffset;
    56915691        }
    56925692
     
    56965696            int rc = VMXWriteVmcs32(VMX_VMCS32_CTRL_PROC_EXEC, uProcCtls);
    56975697            AssertRC(rc);
    5698             pVCpu->hm.s.vmx.GstCtls.u32ProcCtls = uProcCtls;
     5698            pVCpu->hm.s.vmx.Ctls.u32ProcCtls = uProcCtls;
    56995699        }
    57005700        STAM_COUNTER_INC(&pVCpu->hm.s.StatTscOffset);
     
    57085708            int rc = VMXWriteVmcs32(VMX_VMCS32_CTRL_PROC_EXEC, uProcCtls);
    57095709            AssertRC(rc);
    5710             pVCpu->hm.s.vmx.GstCtls.u32ProcCtls = uProcCtls;
     5710            pVCpu->hm.s.vmx.Ctls.u32ProcCtls = uProcCtls;
    57115711        }
    57125712        STAM_COUNTER_INC(&pVCpu->hm.s.StatTscIntercept);
     
    62406240            && (   enmRaise   == IEMXCPTRAISE_PREV_EVENT
    62416241                || (fRaiseInfo & IEMXCPTRAISEINFO_NMI_PF))
    6242             && (pVCpu->hm.s.vmx.GstCtls.u32PinCtls & VMX_PIN_CTLS_VIRT_NMI))
     6242            && (pVCpu->hm.s.vmx.Ctls.u32PinCtls & VMX_PIN_CTLS_VIRT_NMI))
    62436243        {
    62446244            VMCPU_FF_CLEAR(pVCpu, VMCPU_FF_BLOCK_NMIS);
     
    63316331             && VMX_EXIT_INT_INFO_IS_NMI_UNBLOCK_IRET(pVmxTransient->uExitIntInfo)
    63326332             && uExitVector != X86_XCPT_DF
    6333              && (pVCpu->hm.s.vmx.GstCtls.u32PinCtls & VMX_PIN_CTLS_VIRT_NMI))
     6333             && (pVCpu->hm.s.vmx.Ctls.u32PinCtls & VMX_PIN_CTLS_VIRT_NMI))
    63346334    {
    63356335        /*
     
    67866786                    rc |= VMXReadVmcs32(VMX_VMCS_CTRL_CR0_READ_SHADOW, &u32Shadow);
    67876787                    VMXLOCAL_BREAK_RC(rc);
    6788                     u32Val = (u32Val & ~pVCpu->hm.s.vmx.GstCtls.u32Cr0Mask)
    6789                            | (u32Shadow & pVCpu->hm.s.vmx.GstCtls.u32Cr0Mask);
     6788                    u32Val = (u32Val & ~pVCpu->hm.s.vmx.Ctls.u32Cr0Mask)
     6789                           | (u32Shadow & pVCpu->hm.s.vmx.Ctls.u32Cr0Mask);
    67906790                    VMMRZCallRing3Disable(pVCpu);   /* Calls into PGM which has Log statements. */
    67916791                    CPUMSetGuestCR0(pVCpu, u32Val);
     
    67986798                    rc |= VMXReadVmcs32(VMX_VMCS_CTRL_CR4_READ_SHADOW, &u32Shadow);
    67996799                    VMXLOCAL_BREAK_RC(rc);
    6800                     u32Val = (u32Val & ~pVCpu->hm.s.vmx.GstCtls.u32Cr4Mask)
    6801                            | (u32Shadow & pVCpu->hm.s.vmx.GstCtls.u32Cr4Mask);
     6800                    u32Val = (u32Val & ~pVCpu->hm.s.vmx.Ctls.u32Cr4Mask)
     6801                           | (u32Shadow & pVCpu->hm.s.vmx.Ctls.u32Cr4Mask);
    68026802                    CPUMSetGuestCR4(pVCpu, u32Val);
    68036803                }
     
    71607160#ifdef VBOX_STRICT
    71617161    if (CPUMIsHyperDebugStateActive(pVCpu))
    7162         Assert(pVCpu->hm.s.vmx.GstCtls.u32ProcCtls & VMX_PROC_CTLS_MOV_DR_EXIT);
     7162        Assert(pVCpu->hm.s.vmx.Ctls.u32ProcCtls & VMX_PROC_CTLS_MOV_DR_EXIT);
    71637163#endif
    71647164    CPUMR0DebugStateMaybeSaveGuestAndRestoreHost(pVCpu, true /* save DR6 */);
     
    74557455    if (RT_LIKELY(pVCpu->CTX_SUFF(pVM)->hm.s.vmx.Msrs.ProcCtls.n.allowed1 & VMX_PROC_CTLS_INT_WINDOW_EXIT))
    74567456    {
    7457         if (!(pVCpu->hm.s.vmx.GstCtls.u32ProcCtls & VMX_PROC_CTLS_INT_WINDOW_EXIT))
    7458         {
    7459             pVCpu->hm.s.vmx.GstCtls.u32ProcCtls |= VMX_PROC_CTLS_INT_WINDOW_EXIT;
    7460             int rc = VMXWriteVmcs32(VMX_VMCS32_CTRL_PROC_EXEC, pVCpu->hm.s.vmx.GstCtls.u32ProcCtls);
     7457        if (!(pVCpu->hm.s.vmx.Ctls.u32ProcCtls & VMX_PROC_CTLS_INT_WINDOW_EXIT))
     7458        {
     7459            pVCpu->hm.s.vmx.Ctls.u32ProcCtls |= VMX_PROC_CTLS_INT_WINDOW_EXIT;
     7460            int rc = VMXWriteVmcs32(VMX_VMCS32_CTRL_PROC_EXEC, pVCpu->hm.s.vmx.Ctls.u32ProcCtls);
    74617461            AssertRC(rc);
    74627462            Log4Func(("Setup interrupt-window exiting\n"));
     
    74737473DECLINLINE(void) hmR0VmxClearIntWindowExitVmcs(PVMCPU pVCpu)
    74747474{
    7475     Assert(pVCpu->hm.s.vmx.GstCtls.u32ProcCtls & VMX_PROC_CTLS_INT_WINDOW_EXIT);
    7476     pVCpu->hm.s.vmx.GstCtls.u32ProcCtls &= ~VMX_PROC_CTLS_INT_WINDOW_EXIT;
    7477     int rc = VMXWriteVmcs32(VMX_VMCS32_CTRL_PROC_EXEC, pVCpu->hm.s.vmx.GstCtls.u32ProcCtls);
     7475    Assert(pVCpu->hm.s.vmx.Ctls.u32ProcCtls & VMX_PROC_CTLS_INT_WINDOW_EXIT);
     7476    pVCpu->hm.s.vmx.Ctls.u32ProcCtls &= ~VMX_PROC_CTLS_INT_WINDOW_EXIT;
     7477    int rc = VMXWriteVmcs32(VMX_VMCS32_CTRL_PROC_EXEC, pVCpu->hm.s.vmx.Ctls.u32ProcCtls);
    74787478    AssertRC(rc);
    74797479    Log4Func(("Cleared interrupt-window exiting\n"));
     
    74917491    if (RT_LIKELY(pVCpu->CTX_SUFF(pVM)->hm.s.vmx.Msrs.ProcCtls.n.allowed1 & VMX_PROC_CTLS_NMI_WINDOW_EXIT))
    74927492    {
    7493         if (!(pVCpu->hm.s.vmx.GstCtls.u32ProcCtls & VMX_PROC_CTLS_NMI_WINDOW_EXIT))
    7494         {
    7495             pVCpu->hm.s.vmx.GstCtls.u32ProcCtls |= VMX_PROC_CTLS_NMI_WINDOW_EXIT;
    7496             int rc = VMXWriteVmcs32(VMX_VMCS32_CTRL_PROC_EXEC, pVCpu->hm.s.vmx.GstCtls.u32ProcCtls);
     7493        if (!(pVCpu->hm.s.vmx.Ctls.u32ProcCtls & VMX_PROC_CTLS_NMI_WINDOW_EXIT))
     7494        {
     7495            pVCpu->hm.s.vmx.Ctls.u32ProcCtls |= VMX_PROC_CTLS_NMI_WINDOW_EXIT;
     7496            int rc = VMXWriteVmcs32(VMX_VMCS32_CTRL_PROC_EXEC, pVCpu->hm.s.vmx.Ctls.u32ProcCtls);
    74977497            AssertRC(rc);
    74987498            Log4Func(("Setup NMI-window exiting\n"));
     
    75097509DECLINLINE(void) hmR0VmxClearNmiWindowExitVmcs(PVMCPU pVCpu)
    75107510{
    7511     Assert(pVCpu->hm.s.vmx.GstCtls.u32ProcCtls & VMX_PROC_CTLS_NMI_WINDOW_EXIT);
    7512     pVCpu->hm.s.vmx.GstCtls.u32ProcCtls &= ~VMX_PROC_CTLS_NMI_WINDOW_EXIT;
    7513     int rc = VMXWriteVmcs32(VMX_VMCS32_CTRL_PROC_EXEC, pVCpu->hm.s.vmx.GstCtls.u32ProcCtls);
     7511    Assert(pVCpu->hm.s.vmx.Ctls.u32ProcCtls & VMX_PROC_CTLS_NMI_WINDOW_EXIT);
     7512    pVCpu->hm.s.vmx.Ctls.u32ProcCtls &= ~VMX_PROC_CTLS_NMI_WINDOW_EXIT;
     7513    int rc = VMXWriteVmcs32(VMX_VMCS32_CTRL_PROC_EXEC, pVCpu->hm.s.vmx.Ctls.u32ProcCtls);
    75147514    AssertRC(rc);
    75157515    Log4Func(("Cleared NMI-window exiting\n"));
     
    75937593            else if (rc == VERR_APIC_INTR_MASKED_BY_TPR)
    75947594            {
    7595                 if (pVCpu->hm.s.vmx.GstCtls.u32ProcCtls & VMX_PROC_CTLS_USE_TPR_SHADOW)
     7595                if (pVCpu->hm.s.vmx.Ctls.u32ProcCtls & VMX_PROC_CTLS_USE_TPR_SHADOW)
    75967596                    hmR0VmxApicSetTprThreshold(pVCpu, u8Interrupt >> 4);
    75977597                STAM_COUNTER_INC(&pVCpu->hm.s.StatSwitchTprMaskedIrq);
     
    80098009static void hmR0VmxClearIntNmiWindowsVmcs(PVMCPU pVCpu)
    80108010{
    8011     if (pVCpu->hm.s.vmx.GstCtls.u32ProcCtls & VMX_PROC_CTLS_INT_WINDOW_EXIT)
     8011    if (pVCpu->hm.s.vmx.Ctls.u32ProcCtls & VMX_PROC_CTLS_INT_WINDOW_EXIT)
    80128012    {
    80138013        hmR0VmxClearIntWindowExitVmcs(pVCpu);
     
    80158015    }
    80168016
    8017     if (pVCpu->hm.s.vmx.GstCtls.u32ProcCtls & VMX_PROC_CTLS_NMI_WINDOW_EXIT)
     8017    if (pVCpu->hm.s.vmx.Ctls.u32ProcCtls & VMX_PROC_CTLS_NMI_WINDOW_EXIT)
    80188018    {
    80198019        hmR0VmxClearNmiWindowExitVmcs(pVCpu);
     
    84818481    PVM pVM = pVCpu->CTX_SUFF(pVM);
    84828482    if (   !pVCpu->hm.s.vmx.u64MsrApicBase
    8483         && (pVCpu->hm.s.vmx.GstCtls.u32ProcCtls2 & VMX_PROC_CTLS2_VIRT_APIC_ACCESS)
     8483        && (pVCpu->hm.s.vmx.Ctls.u32ProcCtls2 & VMX_PROC_CTLS2_VIRT_APIC_ACCESS)
    84848484        && PDMHasApic(pVM))
    84858485    {
     
    86988698     * Cache the TPR-shadow for checking on every VM-exit if it might have changed.
    86998699     */
    8700     if (pVCpu->hm.s.vmx.GstCtls.u32ProcCtls & VMX_PROC_CTLS_USE_TPR_SHADOW)
     8700    if (pVCpu->hm.s.vmx.Ctls.u32ProcCtls & VMX_PROC_CTLS_USE_TPR_SHADOW)
    87018701        pVmxTransient->u8GuestTpr = pVCpu->hm.s.vmx.pbVirtApic[XAPIC_OFF_TPR];
    87028702
     
    87238723     * Load the TSC_AUX MSR when we are not intercepting RDTSCP.
    87248724     */
    8725     if (pVCpu->hm.s.vmx.GstCtls.u32ProcCtls2 & VMX_PROC_CTLS2_RDTSCP)
    8726     {
    8727         if (!(pVCpu->hm.s.vmx.GstCtls.u32ProcCtls & VMX_PROC_CTLS_RDTSC_EXIT))
     8725    if (pVCpu->hm.s.vmx.Ctls.u32ProcCtls2 & VMX_PROC_CTLS2_RDTSCP)
     8726    {
     8727        if (!(pVCpu->hm.s.vmx.Ctls.u32ProcCtls & VMX_PROC_CTLS_RDTSC_EXIT))
    87288728        {
    87298729            bool fMsrUpdated;
     
    87618761#endif
    87628762#ifdef HMVMX_ALWAYS_CHECK_GUEST_STATE
    8763     if (!(pVCpu->hm.s.vmx.GstCtls.u32ProcCtls & VMX_PROC_CTLS_USE_MSR_BITMAPS))
     8763    if (!(pVCpu->hm.s.vmx.Ctls.u32ProcCtls & VMX_PROC_CTLS_USE_MSR_BITMAPS))
    87648764    {
    87658765        uint32_t uInvalidReason = hmR0VmxCheckGuestState(pVCpu);
     
    87968796    pVmxTransient->fVectoringDoublePF  = false;                 /* Vectoring double page-fault needs to be determined later. */
    87978797
    8798     if (!(pVCpu->hm.s.vmx.GstCtls.u32ProcCtls & VMX_PROC_CTLS_RDTSC_EXIT))
    8799         TMCpuTickSetLastSeen(pVCpu, uHostTsc + pVCpu->hm.s.vmx.GstCtls.u64TscOffset);
     8798    if (!(pVCpu->hm.s.vmx.Ctls.u32ProcCtls & VMX_PROC_CTLS_RDTSC_EXIT))
     8799        TMCpuTickSetLastSeen(pVCpu, uHostTsc + pVCpu->hm.s.vmx.Ctls.u64TscOffset);
    88008800
    88018801    STAM_PROFILE_ADV_STOP_START(&pVCpu->hm.s.StatInGC, &pVCpu->hm.s.StatPreExit, x);
     
    88758875             * Sync the TPR shadow with our APIC state.
    88768876             */
    8877             if (   (pVCpu->hm.s.vmx.GstCtls.u32ProcCtls & VMX_PROC_CTLS_USE_TPR_SHADOW)
     8877            if (   (pVCpu->hm.s.vmx.Ctls.u32ProcCtls & VMX_PROC_CTLS_USE_TPR_SHADOW)
    88788878                && pVmxTransient->u8GuestTpr != pVCpu->hm.s.vmx.pbVirtApic[XAPIC_OFF_TPR])
    88798879            {
     
    90549054    pDbgState->fCpe2Extra           = 0;
    90559055    pDbgState->bmXcptExtra          = 0;
    9056     pDbgState->fProcCtlsInitial     = pVCpu->hm.s.vmx.GstCtls.u32ProcCtls;
    9057     pDbgState->fProcCtls2Initial    = pVCpu->hm.s.vmx.GstCtls.u32ProcCtls2;
    9058     pDbgState->bmXcptInitial        = pVCpu->hm.s.vmx.GstCtls.u32XcptBitmap;
     9056    pDbgState->fProcCtlsInitial     = pVCpu->hm.s.vmx.Ctls.u32ProcCtls;
     9057    pDbgState->fProcCtls2Initial    = pVCpu->hm.s.vmx.Ctls.u32ProcCtls2;
     9058    pDbgState->bmXcptInitial        = pVCpu->hm.s.vmx.Ctls.u32XcptBitmap;
    90599059}
    90609060
     
    90809080     *       there should be no stale data in pCtx at this point.
    90819081     */
    9082     if (   (pVCpu->hm.s.vmx.GstCtls.u32ProcCtls & pDbgState->fCpe1Extra) != pDbgState->fCpe1Extra
    9083         || (pVCpu->hm.s.vmx.GstCtls.u32ProcCtls & pDbgState->fCpe1Unwanted))
    9084     {
    9085         pVCpu->hm.s.vmx.GstCtls.u32ProcCtls   |= pDbgState->fCpe1Extra;
    9086         pVCpu->hm.s.vmx.GstCtls.u32ProcCtls   &= ~pDbgState->fCpe1Unwanted;
    9087         VMXWriteVmcs32(VMX_VMCS32_CTRL_PROC_EXEC, pVCpu->hm.s.vmx.GstCtls.u32ProcCtls);
    9088         Log6Func(("VMX_VMCS32_CTRL_PROC_EXEC: %#RX32\n", pVCpu->hm.s.vmx.GstCtls.u32ProcCtls));
     9082    if (   (pVCpu->hm.s.vmx.Ctls.u32ProcCtls & pDbgState->fCpe1Extra) != pDbgState->fCpe1Extra
     9083        || (pVCpu->hm.s.vmx.Ctls.u32ProcCtls & pDbgState->fCpe1Unwanted))
     9084    {
     9085        pVCpu->hm.s.vmx.Ctls.u32ProcCtls   |= pDbgState->fCpe1Extra;
     9086        pVCpu->hm.s.vmx.Ctls.u32ProcCtls   &= ~pDbgState->fCpe1Unwanted;
     9087        VMXWriteVmcs32(VMX_VMCS32_CTRL_PROC_EXEC, pVCpu->hm.s.vmx.Ctls.u32ProcCtls);
     9088        Log6Func(("VMX_VMCS32_CTRL_PROC_EXEC: %#RX32\n", pVCpu->hm.s.vmx.Ctls.u32ProcCtls));
    90899089        pDbgState->fModifiedProcCtls   = true;
    90909090    }
    90919091
    9092     if ((pVCpu->hm.s.vmx.GstCtls.u32ProcCtls2 & pDbgState->fCpe2Extra) != pDbgState->fCpe2Extra)
    9093     {
    9094         pVCpu->hm.s.vmx.GstCtls.u32ProcCtls2  |= pDbgState->fCpe2Extra;
    9095         VMXWriteVmcs32(VMX_VMCS32_CTRL_PROC_EXEC2, pVCpu->hm.s.vmx.GstCtls.u32ProcCtls2);
    9096         Log6Func(("VMX_VMCS32_CTRL_PROC_EXEC2: %#RX32\n", pVCpu->hm.s.vmx.GstCtls.u32ProcCtls2));
     9092    if ((pVCpu->hm.s.vmx.Ctls.u32ProcCtls2 & pDbgState->fCpe2Extra) != pDbgState->fCpe2Extra)
     9093    {
     9094        pVCpu->hm.s.vmx.Ctls.u32ProcCtls2  |= pDbgState->fCpe2Extra;
     9095        VMXWriteVmcs32(VMX_VMCS32_CTRL_PROC_EXEC2, pVCpu->hm.s.vmx.Ctls.u32ProcCtls2);
     9096        Log6Func(("VMX_VMCS32_CTRL_PROC_EXEC2: %#RX32\n", pVCpu->hm.s.vmx.Ctls.u32ProcCtls2));
    90979097        pDbgState->fModifiedProcCtls2  = true;
    90989098    }
    90999099
    9100     if ((pVCpu->hm.s.vmx.GstCtls.u32XcptBitmap & pDbgState->bmXcptExtra) != pDbgState->bmXcptExtra)
    9101     {
    9102         pVCpu->hm.s.vmx.GstCtls.u32XcptBitmap |= pDbgState->bmXcptExtra;
    9103         VMXWriteVmcs32(VMX_VMCS32_CTRL_EXCEPTION_BITMAP, pVCpu->hm.s.vmx.GstCtls.u32XcptBitmap);
    9104         Log6Func(("VMX_VMCS32_CTRL_EXCEPTION_BITMAP: %#RX32\n", pVCpu->hm.s.vmx.GstCtls.u32XcptBitmap));
     9100    if ((pVCpu->hm.s.vmx.Ctls.u32XcptBitmap & pDbgState->bmXcptExtra) != pDbgState->bmXcptExtra)
     9101    {
     9102        pVCpu->hm.s.vmx.Ctls.u32XcptBitmap |= pDbgState->bmXcptExtra;
     9103        VMXWriteVmcs32(VMX_VMCS32_CTRL_EXCEPTION_BITMAP, pVCpu->hm.s.vmx.Ctls.u32XcptBitmap);
     9104        Log6Func(("VMX_VMCS32_CTRL_EXCEPTION_BITMAP: %#RX32\n", pVCpu->hm.s.vmx.Ctls.u32XcptBitmap));
    91059105        pDbgState->fModifiedXcptBitmap = true;
    91069106    }
    91079107
    9108     if (pDbgState->fClearCr0Mask && pVCpu->hm.s.vmx.GstCtls.u32Cr0Mask != 0)
    9109     {
    9110         pVCpu->hm.s.vmx.GstCtls.u32Cr0Mask = 0;
     9108    if (pDbgState->fClearCr0Mask && pVCpu->hm.s.vmx.Ctls.u32Cr0Mask != 0)
     9109    {
     9110        pVCpu->hm.s.vmx.Ctls.u32Cr0Mask = 0;
    91119111        VMXWriteVmcs32(VMX_VMCS_CTRL_CR0_MASK, 0);
    91129112        Log6Func(("VMX_VMCS_CTRL_CR0_MASK: 0\n"));
    91139113    }
    91149114
    9115     if (pDbgState->fClearCr4Mask && pVCpu->hm.s.vmx.GstCtls.u32Cr4Mask != 0)
    9116     {
    9117         pVCpu->hm.s.vmx.GstCtls.u32Cr4Mask = 0;
     9115    if (pDbgState->fClearCr4Mask && pVCpu->hm.s.vmx.Ctls.u32Cr4Mask != 0)
     9116    {
     9117        pVCpu->hm.s.vmx.Ctls.u32Cr4Mask = 0;
    91189118        VMXWriteVmcs32(VMX_VMCS_CTRL_CR4_MASK, 0);
    91199119        Log6Func(("VMX_VMCS_CTRL_CR4_MASK: 0\n"));
     
    91469146        int rc2 = VMXWriteVmcs32(VMX_VMCS32_CTRL_PROC_EXEC, pDbgState->fProcCtlsInitial);
    91479147        AssertRCReturn(rc2, rc2);
    9148         pVCpu->hm.s.vmx.GstCtls.u32ProcCtls = pDbgState->fProcCtlsInitial;
     9148        pVCpu->hm.s.vmx.Ctls.u32ProcCtls = pDbgState->fProcCtlsInitial;
    91499149    }
    91509150
     
    91529152       cached value and reload the field. */
    91539153    if (   pDbgState->fModifiedProcCtls2
    9154         && pVCpu->hm.s.vmx.GstCtls.u32ProcCtls2 != pDbgState->fProcCtls2Initial)
     9154        && pVCpu->hm.s.vmx.Ctls.u32ProcCtls2 != pDbgState->fProcCtls2Initial)
    91559155    {
    91569156        int rc2 = VMXWriteVmcs32(VMX_VMCS32_CTRL_PROC_EXEC2, pDbgState->fProcCtls2Initial);
    91579157        AssertRCReturn(rc2, rc2);
    9158         pVCpu->hm.s.vmx.GstCtls.u32ProcCtls2 = pDbgState->fProcCtls2Initial;
     9158        pVCpu->hm.s.vmx.Ctls.u32ProcCtls2 = pDbgState->fProcCtls2Initial;
    91599159    }
    91609160
     
    91629162       reloading and partial recalculation the next time around. */
    91639163    if (pDbgState->fModifiedXcptBitmap)
    9164         pVCpu->hm.s.vmx.GstCtls.u32XcptBitmap = pDbgState->bmXcptInitial;
     9164        pVCpu->hm.s.vmx.Ctls.u32XcptBitmap = pDbgState->bmXcptInitial;
    91659165
    91669166    return rcStrict;
     
    1057710577        rc = VMXReadVmcs64(VMX_VMCS64_GUEST_DEBUGCTL_FULL, &u64Val);
    1057810578        AssertRCBreak(rc);
    10579         if (   (pVCpu->hm.s.vmx.GstCtls.u32EntryCtls & VMX_ENTRY_CTLS_LOAD_DEBUG)
     10579        if (   (pVCpu->hm.s.vmx.Ctls.u32EntryCtls & VMX_ENTRY_CTLS_LOAD_DEBUG)
    1058010580            && (u64Val & 0xfffffe3c))                           /* Bits 31:9, bits 5:2 MBZ. */
    1058110581        {
     
    1058710587        rc = VMXReadVmcs32(VMX_VMCS32_CTRL_ENTRY, &u32Val);
    1058810588        AssertRCBreak(rc);
    10589         Assert(u32Val == pVCpu->hm.s.vmx.GstCtls.u32EntryCtls);
     10589        Assert(u32Val == pVCpu->hm.s.vmx.Ctls.u32EntryCtls);
    1059010590#endif
    10591         bool const fLongModeGuest = RT_BOOL(pVCpu->hm.s.vmx.GstCtls.u32EntryCtls & VMX_ENTRY_CTLS_IA32E_MODE_GUEST);
     10591        bool const fLongModeGuest = RT_BOOL(pVCpu->hm.s.vmx.Ctls.u32EntryCtls & VMX_ENTRY_CTLS_IA32E_MODE_GUEST);
    1059210592
    1059310593        /*
     
    1065810658         *        51:32 beyond the processor's physical-address width are 0. */
    1065910659
    10660         if (   (pVCpu->hm.s.vmx.GstCtls.u32EntryCtls & VMX_ENTRY_CTLS_LOAD_DEBUG)
     10660        if (   (pVCpu->hm.s.vmx.Ctls.u32EntryCtls & VMX_ENTRY_CTLS_LOAD_DEBUG)
    1066110661            && (pCtx->dr[7] & X86_DR7_MBZ_MASK))
    1066210662        {
     
    1067610676         * PERF_GLOBAL MSR.
    1067710677         */
    10678         if (pVCpu->hm.s.vmx.GstCtls.u32EntryCtls & VMX_ENTRY_CTLS_LOAD_PERF_MSR)
     10678        if (pVCpu->hm.s.vmx.Ctls.u32EntryCtls & VMX_ENTRY_CTLS_LOAD_PERF_MSR)
    1067910679        {
    1068010680            rc = VMXReadVmcs64(VMX_VMCS64_GUEST_PERF_GLOBAL_CTRL_FULL, &u64Val);
     
    1068710687         * PAT MSR.
    1068810688         */
    10689         if (pVCpu->hm.s.vmx.GstCtls.u32EntryCtls & VMX_ENTRY_CTLS_LOAD_PAT_MSR)
     10689        if (pVCpu->hm.s.vmx.Ctls.u32EntryCtls & VMX_ENTRY_CTLS_LOAD_PAT_MSR)
    1069010690        {
    1069110691            rc = VMXReadVmcs64(VMX_VMCS64_GUEST_PAT_FULL, &u64Val);
     
    1071110711         * EFER MSR.
    1071210712         */
    10713         if (pVCpu->hm.s.vmx.GstCtls.u32EntryCtls & VMX_ENTRY_CTLS_LOAD_EFER_MSR)
     10713        if (pVCpu->hm.s.vmx.Ctls.u32EntryCtls & VMX_ENTRY_CTLS_LOAD_EFER_MSR)
    1071410714        {
    1071510715            Assert(pVM->hm.s.vmx.fSupportsVmcsEfer);
     
    1071810718            HMVMX_CHECK_BREAK(!(u64Val & UINT64_C(0xfffffffffffff2fe)),
    1071910719                              VMX_IGS_EFER_MSR_RESERVED);               /* Bits 63:12, bit 9, bits 7:1 MBZ. */
    10720             HMVMX_CHECK_BREAK(RT_BOOL(u64Val & MSR_K6_EFER_LMA) == RT_BOOL(  pVCpu->hm.s.vmx.GstCtls.u32EntryCtls
     10720            HMVMX_CHECK_BREAK(RT_BOOL(u64Val & MSR_K6_EFER_LMA) == RT_BOOL(  pVCpu->hm.s.vmx.Ctls.u32EntryCtls
    1072110721                                                                           & VMX_ENTRY_CTLS_IA32E_MODE_GUEST),
    1072210722                              VMX_IGS_EFER_LMA_GUEST_MODE_MISMATCH);
     
    1098710987         *        currently don't use activity states but ACTIVE. */
    1098810988
    10989         HMVMX_CHECK_BREAK(   !(pVCpu->hm.s.vmx.GstCtls.u32EntryCtls & VMX_ENTRY_CTLS_ENTRY_TO_SMM)
     10989        HMVMX_CHECK_BREAK(   !(pVCpu->hm.s.vmx.Ctls.u32EntryCtls & VMX_ENTRY_CTLS_ENTRY_TO_SMM)
    1099010990                          || u32ActivityState != VMX_VMCS_GUEST_ACTIVITY_SIPI_WAIT, VMX_IGS_ACTIVITY_STATE_SIPI_WAIT_INVALID);
    1099110991
     
    1101711017        HMVMX_CHECK_BREAK(!(u32IntrState & VMX_VMCS_GUEST_INT_STATE_BLOCK_SMI),
    1101811018                          VMX_IGS_INTERRUPTIBILITY_STATE_SMI_INVALID);
    11019         HMVMX_CHECK_BREAK(   !(pVCpu->hm.s.vmx.GstCtls.u32EntryCtls & VMX_ENTRY_CTLS_ENTRY_TO_SMM)
     11019        HMVMX_CHECK_BREAK(   !(pVCpu->hm.s.vmx.Ctls.u32EntryCtls & VMX_ENTRY_CTLS_ENTRY_TO_SMM)
    1102011020                          || (u32IntrState & VMX_VMCS_GUEST_INT_STATE_BLOCK_SMI),
    1102111021                             VMX_IGS_INTERRUPTIBILITY_STATE_SMI_SMM_INVALID);
    11022         if (   (pVCpu->hm.s.vmx.GstCtls.u32PinCtls & VMX_PIN_CTLS_VIRT_NMI)
     11022        if (   (pVCpu->hm.s.vmx.Ctls.u32PinCtls & VMX_PIN_CTLS_VIRT_NMI)
    1102311023            && VMX_ENTRY_INT_INFO_IS_VALID(u32EntryInfo)
    1102411024            && VMX_ENTRY_INT_INFO_TYPE(u32EntryInfo) == VMX_EXIT_INT_INFO_TYPE_NMI)
     
    1114111141
    1114211142    uint32_t uIntType = VMX_EXIT_INT_INFO_TYPE(pVmxTransient->uExitIntInfo);
    11143     Assert(   !(pVCpu->hm.s.vmx.GstCtls.u32ExitCtls & VMX_EXIT_CTLS_ACK_EXT_INT)
     11143    Assert(   !(pVCpu->hm.s.vmx.Ctls.u32ExitCtls & VMX_EXIT_CTLS_ACK_EXT_INT)
    1114411144           && uIntType != VMX_EXIT_INT_INFO_TYPE_EXT_INT);
    1114511145    Assert(VMX_EXIT_INT_INFO_IS_VALID(pVmxTransient->uExitIntInfo));
     
    1128611286{
    1128711287    HMVMX_VALIDATE_EXIT_HANDLER_PARAMS(pVCpu, pVmxTransient);
    11288     if (RT_UNLIKELY(!(pVCpu->hm.s.vmx.GstCtls.u32ProcCtls & VMX_PROC_CTLS_NMI_WINDOW_EXIT)))
     11288    if (RT_UNLIKELY(!(pVCpu->hm.s.vmx.Ctls.u32ProcCtls & VMX_PROC_CTLS_NMI_WINDOW_EXIT)))
    1128911289    {
    1129011290        AssertMsgFailed(("Unexpected NMI-window exit.\n"));
     
    1142611426        /* If we get a spurious VM-exit when offsetting is enabled,
    1142711427           we must reset offsetting on VM-reentry. See @bugref{6634}. */
    11428         if (pVCpu->hm.s.vmx.GstCtls.u32ProcCtls & VMX_PROC_CTLS_USE_TSC_OFFSETTING)
     11428        if (pVCpu->hm.s.vmx.Ctls.u32ProcCtls & VMX_PROC_CTLS_USE_TSC_OFFSETTING)
    1142911429            pVmxTransient->fUpdateTscOffsettingAndPreemptTimer = true;
    1143011430        ASMAtomicUoOrU64(&pVCpu->hm.s.fCtxChanged, HM_CHANGED_GUEST_RIP | HM_CHANGED_GUEST_RFLAGS);
     
    1145411454        /* If we get a spurious VM-exit when offsetting is enabled,
    1145511455           we must reset offsetting on VM-reentry. See @bugref{6634}. */
    11456         if (pVCpu->hm.s.vmx.GstCtls.u32ProcCtls & VMX_PROC_CTLS_USE_TSC_OFFSETTING)
     11456        if (pVCpu->hm.s.vmx.Ctls.u32ProcCtls & VMX_PROC_CTLS_USE_TSC_OFFSETTING)
    1145711457            pVmxTransient->fUpdateTscOffsettingAndPreemptTimer = true;
    1145811458        ASMAtomicUoOrU64(&pVCpu->hm.s.fCtxChanged, HM_CHANGED_GUEST_RIP | HM_CHANGED_GUEST_RFLAGS);
     
    1172611726{
    1172711727    HMVMX_VALIDATE_EXIT_HANDLER_PARAMS(pVCpu, pVmxTransient);
    11728     Assert(pVCpu->hm.s.vmx.GstCtls.u32ProcCtls & VMX_PROC_CTLS_HLT_EXIT);
     11728    Assert(pVCpu->hm.s.vmx.Ctls.u32ProcCtls & VMX_PROC_CTLS_HLT_EXIT);
    1172911729
    1173011730    int rc = hmR0VmxAdvanceGuestRip(pVCpu, pVmxTransient);
     
    1190711907    /* By default, we don't enable VMX_PROC_CTLS2_DESCRIPTOR_TABLE_EXIT. */
    1190811908    STAM_COUNTER_INC(&pVCpu->hm.s.StatExitXdtrAccess);
    11909     if (pVCpu->hm.s.vmx.GstCtls.u32ProcCtls2 & VMX_PROC_CTLS2_DESC_TABLE_EXIT)
     11909    if (pVCpu->hm.s.vmx.Ctls.u32ProcCtls2 & VMX_PROC_CTLS2_DESC_TABLE_EXIT)
    1191011910        return VERR_EM_INTERPRETER;
    1191111911    AssertMsgFailed(("Unexpected XDTR access\n"));
     
    1192211922
    1192311923    /* By default, we don't enable VMX_PROC_CTLS2_RDRAND_EXIT. */
    11924     if (pVCpu->hm.s.vmx.GstCtls.u32ProcCtls2 & VMX_PROC_CTLS2_RDRAND_EXIT)
     11924    if (pVCpu->hm.s.vmx.Ctls.u32ProcCtls2 & VMX_PROC_CTLS2_RDRAND_EXIT)
    1192511925        return VERR_EM_INTERPRETER;
    1192611926    AssertMsgFailed(("Unexpected RDRAND exit\n"));
     
    1195411954
    1195511955#ifdef VBOX_STRICT
    11956     if (pVCpu->hm.s.vmx.GstCtls.u32ProcCtls & VMX_PROC_CTLS_USE_MSR_BITMAPS)
     11956    if (pVCpu->hm.s.vmx.Ctls.u32ProcCtls & VMX_PROC_CTLS_USE_MSR_BITMAPS)
    1195711957    {
    1195811958        if (   hmR0VmxIsAutoLoadStoreGuestMsr(pVCpu, idMsr)
     
    1205712057
    1205812058        /* Update MSRs that are part of the VMCS and auto-load/store area when MSR-bitmaps are not supported. */
    12059         if (!(pVCpu->hm.s.vmx.GstCtls.u32ProcCtls & VMX_PROC_CTLS_USE_MSR_BITMAPS))
     12059        if (!(pVCpu->hm.s.vmx.Ctls.u32ProcCtls & VMX_PROC_CTLS_USE_MSR_BITMAPS))
    1206012060        {
    1206112061            switch (idMsr)
     
    1215612156{
    1215712157    HMVMX_VALIDATE_EXIT_HANDLER_PARAMS(pVCpu, pVmxTransient);
    12158     Assert(pVCpu->hm.s.vmx.GstCtls.u32ProcCtls & VMX_PROC_CTLS_USE_TPR_SHADOW);
     12158    Assert(pVCpu->hm.s.vmx.Ctls.u32ProcCtls & VMX_PROC_CTLS_USE_TPR_SHADOW);
    1215912159
    1216012160    /*
     
    1226512265                {
    1226612266                    STAM_COUNTER_INC(&pVCpu->hm.s.StatExitCR8Write);
    12267                     Assert(!(pVCpu->hm.s.vmx.GstCtls.u32ProcCtls & VMX_PROC_CTLS_USE_TPR_SHADOW));
     12267                    Assert(!(pVCpu->hm.s.vmx.Ctls.u32ProcCtls & VMX_PROC_CTLS_USE_TPR_SHADOW));
    1226812268                    ASMAtomicUoOrU64(&pVCpu->hm.s.fCtxChanged,
    1226912269                                     HM_CHANGED_GUEST_RIP | HM_CHANGED_GUEST_RFLAGS | HM_CHANGED_GUEST_APIC_TPR);
     
    1228512285            /* CR8 reads only cause a VM-exit when the TPR shadow feature isn't enabled. */
    1228612286            Assert(   VMX_EXIT_QUAL_CRX_REGISTER(uExitQual) != 8
    12287                    || !(pVCpu->hm.s.vmx.GstCtls.u32ProcCtls & VMX_PROC_CTLS_USE_TPR_SHADOW));
     12287                   || !(pVCpu->hm.s.vmx.Ctls.u32ProcCtls & VMX_PROC_CTLS_USE_TPR_SHADOW));
    1228812288
    1228912289            rcStrict = IEMExecDecodedMovCRxRead(pVCpu, pVmxTransient->cbInstr, VMX_EXIT_QUAL_CRX_GENREG(uExitQual),
     
    1265412654{
    1265512655    HMVMX_VALIDATE_EXIT_HANDLER_PARAMS(pVCpu, pVmxTransient);
    12656     Assert(pVCpu->hm.s.vmx.GstCtls.u32ProcCtls & VMX_PROC_CTLS_MONITOR_TRAP_FLAG);
    12657     pVCpu->hm.s.vmx.GstCtls.u32ProcCtls &= ~VMX_PROC_CTLS_MONITOR_TRAP_FLAG;
    12658     int rc = VMXWriteVmcs32(VMX_VMCS32_CTRL_PROC_EXEC, pVCpu->hm.s.vmx.GstCtls.u32ProcCtls);
     12656    Assert(pVCpu->hm.s.vmx.Ctls.u32ProcCtls & VMX_PROC_CTLS_MONITOR_TRAP_FLAG);
     12657    pVCpu->hm.s.vmx.Ctls.u32ProcCtls &= ~VMX_PROC_CTLS_MONITOR_TRAP_FLAG;
     12658    int rc = VMXWriteVmcs32(VMX_VMCS32_CTRL_PROC_EXEC, pVCpu->hm.s.vmx.Ctls.u32ProcCtls);
    1265912659    AssertRCReturn(rc, rc);
    1266012660    STAM_COUNTER_INC(&pVCpu->hm.s.StatExitMtf);
     
    1270312703        case VMX_APIC_ACCESS_TYPE_LINEAR_READ:
    1270412704        {
    12705             AssertMsg(   !(pVCpu->hm.s.vmx.GstCtls.u32ProcCtls & VMX_PROC_CTLS_USE_TPR_SHADOW)
     12705            AssertMsg(   !(pVCpu->hm.s.vmx.Ctls.u32ProcCtls & VMX_PROC_CTLS_USE_TPR_SHADOW)
    1270612706                      || VMX_EXIT_QUAL_APIC_ACCESS_OFFSET(pVmxTransient->uExitQual) != XAPIC_OFF_TPR,
    1270712707                      ("hmR0VmxExitApicAccess: can't access TPR offset while using TPR shadowing.\n"));
     
    1276112761    {
    1276212762        Assert(!DBGFIsStepping(pVCpu));
    12763         Assert(pVCpu->hm.s.vmx.GstCtls.u32XcptBitmap & RT_BIT_32(X86_XCPT_DB));
     12763        Assert(pVCpu->hm.s.vmx.Ctls.u32XcptBitmap & RT_BIT_32(X86_XCPT_DB));
    1276412764
    1276512765        /* Don't intercept MOV DRx any more. */
    12766         pVCpu->hm.s.vmx.GstCtls.u32ProcCtls &= ~VMX_PROC_CTLS_MOV_DR_EXIT;
    12767         int rc = VMXWriteVmcs32(VMX_VMCS32_CTRL_PROC_EXEC, pVCpu->hm.s.vmx.GstCtls.u32ProcCtls);
     12766        pVCpu->hm.s.vmx.Ctls.u32ProcCtls &= ~VMX_PROC_CTLS_MOV_DR_EXIT;
     12767        int rc = VMXWriteVmcs32(VMX_VMCS32_CTRL_PROC_EXEC, pVCpu->hm.s.vmx.Ctls.u32ProcCtls);
    1276812768        AssertRCReturn(rc, rc);
    1276912769
     
    1331213312    AssertMsg(pVCpu->hm.s.fUsingDebugLoop || pVCpu->hm.s.vmx.RealMode.fRealOnV86Active,
    1331313313              ("uVector=%#x u32XcptBitmap=%#X32\n",
    13314                VMX_EXIT_INT_INFO_VECTOR(pVmxTransient->uExitIntInfo), pVCpu->hm.s.vmx.GstCtls.u32XcptBitmap));
     13314               VMX_EXIT_INT_INFO_VECTOR(pVmxTransient->uExitIntInfo), pVCpu->hm.s.vmx.Ctls.u32XcptBitmap));
    1331513315#endif
    1331613316
  • trunk/src/VBox/VMM/VMMR3/HM.cpp

    r77494 r77563  
    29142914                else if (pVCpu->hm.s.vmx.LastError.u32InstrError == VMXINSTRERR_VMENTRY_INVALID_CTLS)
    29152915                {
    2916                     LogRel(("HM: CPU[%u] PinCtls          %#RX32\n", i, pVCpu->hm.s.vmx.GstCtls.u32PinCtls));
     2916                    LogRel(("HM: CPU[%u] PinCtls          %#RX32\n", i, pVCpu->hm.s.vmx.Ctls.u32PinCtls));
    29172917                    {
    2918                         uint32_t const u32Val = pVCpu->hm.s.vmx.GstCtls.u32PinCtls;
     2918                        uint32_t const u32Val = pVCpu->hm.s.vmx.Ctls.u32PinCtls;
    29192919                        HMVMX_LOGREL_FEAT(u32Val, VMX_PIN_CTLS_EXT_INT_EXIT );
    29202920                        HMVMX_LOGREL_FEAT(u32Val, VMX_PIN_CTLS_NMI_EXIT     );
     
    29232923                        HMVMX_LOGREL_FEAT(u32Val, VMX_PIN_CTLS_POSTED_INT   );
    29242924                    }
    2925                     LogRel(("HM: CPU[%u] ProcCtls         %#RX32\n", i, pVCpu->hm.s.vmx.GstCtls.u32ProcCtls));
     2925                    LogRel(("HM: CPU[%u] ProcCtls         %#RX32\n", i, pVCpu->hm.s.vmx.Ctls.u32ProcCtls));
    29262926                    {
    2927                         uint32_t const u32Val = pVCpu->hm.s.vmx.GstCtls.u32ProcCtls;
     2927                        uint32_t const u32Val = pVCpu->hm.s.vmx.Ctls.u32ProcCtls;
    29282928                        HMVMX_LOGREL_FEAT(u32Val, VMX_PROC_CTLS_INT_WINDOW_EXIT   );
    29292929                        HMVMX_LOGREL_FEAT(u32Val, VMX_PROC_CTLS_USE_TSC_OFFSETTING);
     
    29482948                        HMVMX_LOGREL_FEAT(u32Val, VMX_PROC_CTLS_USE_SECONDARY_CTLS);
    29492949                    }
    2950                     LogRel(("HM: CPU[%u] ProcCtls2        %#RX32\n", i, pVCpu->hm.s.vmx.GstCtls.u32ProcCtls2));
     2950                    LogRel(("HM: CPU[%u] ProcCtls2        %#RX32\n", i, pVCpu->hm.s.vmx.Ctls.u32ProcCtls2));
    29512951                    {
    2952                         uint32_t const u32Val = pVCpu->hm.s.vmx.GstCtls.u32ProcCtls2;
     2952                        uint32_t const u32Val = pVCpu->hm.s.vmx.Ctls.u32ProcCtls2;
    29532953                        HMVMX_LOGREL_FEAT(u32Val, VMX_PROC_CTLS2_VIRT_APIC_ACCESS  );
    29542954                        HMVMX_LOGREL_FEAT(u32Val, VMX_PROC_CTLS2_EPT               );
     
    29742974                        HMVMX_LOGREL_FEAT(u32Val, VMX_PROC_CTLS2_TSC_SCALING       );
    29752975                    }
    2976                     LogRel(("HM: CPU[%u] EntryCtls        %#RX32\n", i, pVCpu->hm.s.vmx.GstCtls.u32EntryCtls));
     2976                    LogRel(("HM: CPU[%u] EntryCtls        %#RX32\n", i, pVCpu->hm.s.vmx.Ctls.u32EntryCtls));
    29772977                    {
    2978                         uint32_t const u32Val = pVCpu->hm.s.vmx.GstCtls.u32EntryCtls;
     2978                        uint32_t const u32Val = pVCpu->hm.s.vmx.Ctls.u32EntryCtls;
    29792979                        HMVMX_LOGREL_FEAT(u32Val, VMX_ENTRY_CTLS_LOAD_DEBUG         );
    29802980                        HMVMX_LOGREL_FEAT(u32Val, VMX_ENTRY_CTLS_IA32E_MODE_GUEST   );
     
    29852985                        HMVMX_LOGREL_FEAT(u32Val, VMX_ENTRY_CTLS_LOAD_EFER_MSR      );
    29862986                    }
    2987                     LogRel(("HM: CPU[%u] ExitCtls         %#RX32\n", i, pVCpu->hm.s.vmx.GstCtls.u32ExitCtls));
     2987                    LogRel(("HM: CPU[%u] ExitCtls         %#RX32\n", i, pVCpu->hm.s.vmx.Ctls.u32ExitCtls));
    29882988                    {
    2989                         uint32_t const u32Val = pVCpu->hm.s.vmx.GstCtls.u32ExitCtls;
     2989                        uint32_t const u32Val = pVCpu->hm.s.vmx.Ctls.u32ExitCtls;
    29902990                        HMVMX_LOGREL_FEAT(u32Val, VMX_EXIT_CTLS_SAVE_DEBUG            );
    29912991                        HMVMX_LOGREL_FEAT(u32Val, VMX_EXIT_CTLS_HOST_ADDR_SPACE_SIZE  );
  • trunk/src/VBox/VMM/include/HMInternal.h

    r77493 r77563  
    782782#endif
    783783
    784             /** Cache of guest VMCS control fields. */
    785             VMXVMCSCTLSCACHE            GstCtls;
    786             /** Cache of nested-guest VMCS control fields. */
    787             VMXVMCSCTLSCACHE            NstGstCtls;
     784            /** Cache of the executing guest (or nested-guest) VMCS control fields. */
     785            VMXVMCSCTLSCACHE            Ctls;
     786            /** Cache of guest (level 1) VMCS control fields when executing a nested-guest
     787             *  (level 2). */
     788            VMXVMCSCTLSCACHE            Level1Ctls;
    788789
    789790            /** Physical address of the VM control structure (VMCS). */
Note: See TracChangeset for help on using the changeset viewer.

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