VirtualBox

Ignore:
Timestamp:
Jan 29, 2021 6:06:39 PM (4 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
142509
Message:

VMM/HMVMX: Moving more stuff to HMR0PERVCPU. bugref:9217

File:
1 edited

Legend:

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

    r87480 r87487  
    731731        { hmR0SvmVmRun_WithXcr0_WithIbpbEntry_WithIbpbExit },
    732732    };
    733     uintptr_t const idx = (pVCpu->hm.s.fLoadSaveGuestXcr0                             ? 1 : 0)
     733    uintptr_t const idx = (pVCpu->hmr0.s.fLoadSaveGuestXcr0                           ? 1 : 0)
    734734                        | (pVCpu->cpum.GstCtx.fWorldSwitcher & CPUMCTX_WSF_IBPB_ENTRY ? 2 : 0)
    735735                        | (pVCpu->cpum.GstCtx.fWorldSwitcher & CPUMCTX_WSF_IBPB_EXIT  ? 4 : 0);
     
    12911291    {
    12921292        STAM_COUNTER_INC(&pVCpu->hm.s.StatFlushTlbWorldSwitch);
    1293         pVCpu->hm.s.fForceTLBFlush = true;
     1293        pVCpu->hmr0.s.fForceTLBFlush = true;
    12941294        fNewAsid = true;
    12951295    }
     
    13011301    if (VMCPU_FF_TEST_AND_CLEAR(pVCpu, VMCPU_FF_TLB_FLUSH))
    13021302    {
    1303         pVCpu->hm.s.fForceTLBFlush = true;
     1303        pVCpu->hmr0.s.fForceTLBFlush = true;
    13041304        STAM_COUNTER_INC(&pVCpu->hm.s.StatFlushTlb);
    13051305    }
     
    13241324    {
    13251325        pVmcb->ctrl.TLBCtrl.n.u8TLBFlush = SVM_TLB_FLUSH_NOTHING;
    1326         if (pVCpu->hm.s.fForceTLBFlush)
     1326        if (pVCpu->hmr0.s.fForceTLBFlush)
    13271327        {
    13281328            /* Clear the VMCB Clean Bit for NP while flushing the TLB. See @bugref{7152}. */
     
    13601360            }
    13611361
    1362             pVCpu->hm.s.fForceTLBFlush = false;
     1362            pVCpu->hmr0.s.fForceTLBFlush = false;
    13631363        }
    13641364    }
     
    16691669    /* Whether to save/load/restore XCR0 during world switch depends on CR4.OSXSAVE and host+guest XCR0. */
    16701670    bool const fLoadSaveGuestXcr0 = (pCtx->cr4 & X86_CR4_OSXSAVE) && pCtx->aXcr[0] != ASMGetXcr0();
    1671     if (fLoadSaveGuestXcr0 != pVCpu->hm.s.fLoadSaveGuestXcr0)
    1672     {
    1673         pVCpu->hm.s.fLoadSaveGuestXcr0 = fLoadSaveGuestXcr0;
     1671    if (fLoadSaveGuestXcr0 != pVCpu->hmr0.s.fLoadSaveGuestXcr0)
     1672    {
     1673        pVCpu->hmr0.s.fLoadSaveGuestXcr0 = fLoadSaveGuestXcr0;
    16741674        hmR0SvmUpdateVmRunFunction(pVCpu);
    16751675    }
     
    19181918    if (fStepping)
    19191919    {
    1920         pVCpu->hm.s.fClearTrapFlag = true;
     1920        pVCpu->hmr0.s.fClearTrapFlag = true;
    19211921        pVmcb->guest.u64RFlags |= X86_EFL_TF;
    19221922        fInterceptMovDRx = true; /* Need clean DR6, no guest mess. */
     
    19521952         *        with the same values. */
    19531953        fInterceptMovDRx = true;
    1954         pVCpu->hm.s.fUsingHyperDR7 = true;
     1954        pVCpu->hmr0.s.fUsingHyperDR7 = true;
    19551955        Log5(("hmR0SvmExportSharedDebugState: Loaded hyper DRx\n"));
    19561956    }
     
    19671967            pVmcb->ctrl.u32VmcbCleanBits &= ~HMSVM_VMCB_CLEAN_DRX;
    19681968        }
    1969         pVCpu->hm.s.fUsingHyperDR7 = false;
     1969        pVCpu->hmr0.s.fUsingHyperDR7 = false;
    19701970
    19711971        /*
     
    22802280                                   == (HM_CHANGED_HOST_CONTEXT | HM_CHANGED_SVM_HOST_GUEST_SHARED_STATE));
    22812281
    2282     pVCpu->hm.s.fLeaveDone = false;
     2282    pVCpu->hmr0.s.fLeaveDone = false;
    22832283    return VINF_SUCCESS;
    22842284}
     
    23082308            VMMRZCallRing3Disable(pVCpu);
    23092309
    2310             if (!pVCpu->hm.s.fLeaveDone)
     2310            if (!pVCpu->hmr0.s.fLeaveDone)
    23112311            {
    23122312                hmR0SvmLeave(pVCpu, false /* fImportState */);
    2313                 pVCpu->hm.s.fLeaveDone = true;
     2313                pVCpu->hmr0.s.fLeaveDone = true;
    23142314            }
    23152315
     
    23422342                                           == (HM_CHANGED_HOST_CONTEXT | HM_CHANGED_SVM_HOST_GUEST_SHARED_STATE));
    23432343
    2344             pVCpu->hm.s.fLeaveDone = false;
     2344            pVCpu->hmr0.s.fLeaveDone = false;
    23452345
    23462346            /* Restore longjmp state. */
     
    28182818            if (fWhat & CPUMCTX_EXTRN_DR6)
    28192819            {
    2820                 if (!pVCpu->hm.s.fUsingHyperDR7)
     2820                if (!pVCpu->hmr0.s.fUsingHyperDR7)
    28212821                    pCtx->dr[6] = pVmcbGuest->u64DR6;
    28222822                else
     
    28262826            if (fWhat & CPUMCTX_EXTRN_DR7)
    28272827            {
    2828                 if (!pVCpu->hm.s.fUsingHyperDR7)
     2828                if (!pVCpu->hmr0.s.fUsingHyperDR7)
    28292829                    pCtx->dr[7] = pVmcbGuest->u64DR7;
    28302830                else
     
    29942994    /* When thread-context hooks are used, we can avoid doing the leave again if we had been preempted before
    29952995       and done this from the SVMR0ThreadCtxCallback(). */
    2996     if (!pVCpu->hm.s.fLeaveDone)
     2996    if (!pVCpu->hmr0.s.fLeaveDone)
    29972997    {
    29982998        hmR0SvmLeave(pVCpu, true /* fImportState */);
    2999         pVCpu->hm.s.fLeaveDone = true;
     2999        pVCpu->hmr0.s.fLeaveDone = true;
    30003000    }
    30013001
     
    46204620     * Clear the X86_EFL_TF if necessary.
    46214621     */
    4622     if (pVCpu->hm.s.fClearTrapFlag)
    4623     {
    4624         pVCpu->hm.s.fClearTrapFlag = false;
     4622    if (pVCpu->hmr0.s.fClearTrapFlag)
     4623    {
     4624        pVCpu->hmr0.s.fClearTrapFlag = false;
    46254625        pCtx->eflags.Bits.u1TF = 0;
    46264626    }
     
    65536553        bool const fLoadSaveGuestXcr0 = (pCtx->cr4 & X86_CR4_OSXSAVE) && pCtx->aXcr[0] != ASMGetXcr0();
    65546554        Log4Func(("New XCR0=%#RX64 fLoadSaveGuestXcr0=%RTbool (cr4=%#RX64)\n", pCtx->aXcr[0], fLoadSaveGuestXcr0, pCtx->cr4));
    6555         if (fLoadSaveGuestXcr0 != pVCpu->hm.s.fLoadSaveGuestXcr0)
    6556         {
    6557             pVCpu->hm.s.fLoadSaveGuestXcr0 = fLoadSaveGuestXcr0;
     6555        if (fLoadSaveGuestXcr0 != pVCpu->hmr0.s.fLoadSaveGuestXcr0)
     6556        {
     6557            pVCpu->hmr0.s.fLoadSaveGuestXcr0 = fLoadSaveGuestXcr0;
    65586558            hmR0SvmUpdateVmRunFunction(pVCpu);
    65596559        }
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