VirtualBox

儲存庫 vbox 的更動 75759


忽略:
時間撮記:
2018-11-27 上午07:10:10 (6 年 以前)
作者:
vboxsync
svn:sync-xref-src-repo-rev:
126960
訊息:

VMM: Nested SVM: bugref:7243 Remove super confusing virtual-GIF vs GIF handling.

位置:
trunk
檔案:
修改 6 筆資料

圖例:

未更動
新增
刪除
  • trunk/include/VBox/vmm/cpum.h

    r75646 r75759  
    14331433VMM_INT_DECL(bool)      CPUMCanSvmNstGstTakeVirtIntr(PVMCPU pVCpu, PCCPUMCTX pCtx);
    14341434VMM_INT_DECL(uint8_t)   CPUMGetSvmNstGstInterrupt(PCCPUMCTX pCtx);
    1435 VMM_INT_DECL(bool)      CPUMGetSvmNstGstVGif(PCCPUMCTX pCtx);
    14361435VMM_INT_DECL(void)      CPUMSvmVmExitRestoreHostState(PVMCPU pVCpu, PCPUMCTX pCtx);
    14371436VMM_INT_DECL(void)      CPUMSvmVmRunSaveHostState(PCPUMCTX pCtx, uint8_t cbInstr);
  • trunk/src/VBox/VMM/VMMAll/CPUMAllRegs.cpp

    r75729 r75759  
    28442844    PCSVMVMCBCTRL pVmcbCtrl    = &pCtx->hwvirt.svm.CTX_SUFF(pVmcb)->ctrl;
    28452845    PCSVMINTCTRL  pVmcbIntCtrl = &pVmcbCtrl->IntCtrl;
     2846    Assert(!pVmcbIntCtrl->n.u1VGifEnable);      /* We don't support passing virtual-GIF feature to the guest yet. */
    28462847    if (   !pVmcbIntCtrl->n.u1IgnoreTPR
    28472848        &&  pVmcbIntCtrl->n.u4VIntrPrio <= pVmcbIntCtrl->n.u8VTPR)
     
    28732874    PCSVMVMCBCTRL pVmcbCtrl = &pCtx->hwvirt.svm.CTX_SUFF(pVmcb)->ctrl;
    28742875    return pVmcbCtrl->IntCtrl.n.u8VIntrVector;
    2875 #endif
    2876 }
    2877 
    2878 
    2879 /**
    2880  * Gets the SVM nested-guest virtual GIF.
    2881  *
    2882  * @returns The nested-guest virtual GIF.
    2883  * @param   pCtx            The guest-CPU context.
    2884  */
    2885 VMM_INT_DECL(bool) CPUMGetSvmNstGstVGif(PCCPUMCTX pCtx)
    2886 {
    2887 #ifdef IN_RC
    2888     RT_NOREF(pCtx);
    2889     AssertReleaseFailedReturn(false);
    2890 #else
    2891     PCSVMVMCBCTRL pVmcbCtrl    = &pCtx->hwvirt.svm.CTX_SUFF(pVmcb)->ctrl;
    2892     PCSVMINTCTRL  pVmcbIntCtrl = &pVmcbCtrl->IntCtrl;
    2893     if (pVmcbIntCtrl->n.u1VGifEnable)
    2894         return pVmcbIntCtrl->n.u1VGif;
    2895     return true;
    28962876#endif
    28972877}
  • trunk/src/VBox/VMM/VMMAll/HMSVMAll.cpp

    r75611 r75759  
    186186    bool const fVGif    = RT_BOOL(pVM->hm.s.svm.u32Features & X86_CPUID_SVM_FEATURE_EDX_VGIF);
    187187    bool const fUseVGif = fVGif && pVM->hm.s.svm.fVGif;
    188 
    189     return HMIsEnabled(pVM) && fVGif && fUseVGif;
     188    return fVGif && fUseVGif;
    190189}
    191190
  • trunk/src/VBox/VMM/VMMAll/IEMAllCImplSvmInstr.cpp.h

    r75638 r75759  
    340340# if defined(VBOX_WITH_NESTED_HWVIRT_ONLY_IN_IEM) && defined(IN_RING3)
    341341    /* CLGI/STGI may not have been intercepted and thus not executed in IEM. */
    342     if (HMSvmIsVGifActive(pVCpu->CTX_SUFF(pVM)))
     342    if (   HMIsEnabled(pVM)
     343        && HMSvmIsVGifActive(pVCpu->CTX_SUFF(pVM)))
    343344        return EMR3SetExecutionPolicy(pVCpu->CTX_SUFF(pVM)->pUVM, EMEXECPOLICY_IEM_ALL, false);
    344345# endif
     
    840841# if defined(VBOX_WITH_NESTED_HWVIRT_ONLY_IN_IEM) && defined(IN_RING3)
    841842        /* If CLGI/STGI isn't intercepted we force IEM-only nested-guest execution here. */
    842         if (HMSvmIsVGifActive(pVM))
     843        if (   HMIsEnabled(pVM)
     844            && HMSvmIsVGifActive(pVM))
    843845            return EMR3SetExecutionPolicy(pVCpu->CTX_SUFF(pVM)->pUVM, EMEXECPOLICY_IEM_ALL, true);
    844846# endif
  • trunk/src/VBox/VMM/VMMR0/HMSVMR0.cpp

    r75611 r75759  
    24442444    if (pVmcb->ctrl.IntCtrl.n.u1VGifEnable)
    24452445    {
    2446         Assert(pVCpu->CTX_SUFF(pVM)->hm.s.svm.u32Features & X86_CPUID_SVM_FEATURE_EDX_VGIF);
     2446        Assert(pVCpu->CTX_SUFF(pVM)->hm.s.svm.u32Features & X86_CPUID_SVM_FEATURE_EDX_VGIF);    /* Hardware supports it. */
     2447        Assert(HMSvmIsVGifActive(pVCpu->CTX_SUFF(pVM)));                                        /* VM has configured it. */
    24472448        pVmcb->ctrl.IntCtrl.n.u1VGif = pCtx->hwvirt.fGif;
    24482449    }
     
    27942795        if (fWhat & CPUMCTX_EXTRN_HWVIRT)
    27952796        {
    2796             if (   !CPUMIsGuestInSvmNestedHwVirtMode(pCtx)
    2797                 && pVmcbCtrl->IntCtrl.n.u1VGifEnable)
     2797            if (pVmcbCtrl->IntCtrl.n.u1VGifEnable)
    27982798            {
    2799                 /* We don't yet support passing VGIF feature to the guest. */
    2800                 Assert(pVCpu->CTX_SUFF(pVM)->hm.s.svm.fVGif);
     2799                Assert(!CPUMIsGuestInSvmNestedHwVirtMode(pCtx));    /* We don't yet support passing VGIF feature to the guest. */
     2800                Assert(HMSvmIsVGifActive(pVCpu->CTX_SUFF(pVM)));    /* VM has configured it. */
    28012801                pCtx->hwvirt.fGif = pVmcbCtrl->IntCtrl.n.u1VGif;
    28022802            }
     
    37293729
    37303730    Assert(!pVCpu->hm.s.Event.fPending);
    3731     Assert(pCtx->hwvirt.fGif);
    37323731    PSVMVMCB pVmcb = hmR0SvmGetCurrentVmcb(pVCpu);
    37333732    Assert(pVmcb);
    37343733
    3735     bool const fVirtualGif = CPUMGetSvmNstGstVGif(pCtx);
     3734    bool const fGif        = pCtx->hwvirt.fGif;
    37363735    bool const fIntShadow  = hmR0SvmIsIntrShadowActive(pVCpu);
    37373736    bool const fBlockNmi   = VMCPU_FF_IS_SET(pVCpu, VMCPU_FF_BLOCK_NMIS);
    37383737
    3739     Log4Func(("fVirtualGif=%RTbool fBlockNmi=%RTbool fIntShadow=%RTbool fIntPending=%RTbool fNmiPending=%RTbool\n",
    3740               fVirtualGif, fBlockNmi, fIntShadow, VMCPU_FF_IS_ANY_SET(pVCpu, VMCPU_FF_INTERRUPT_APIC | VMCPU_FF_INTERRUPT_PIC),
     3738    Log4Func(("fGif=%RTbool fBlockNmi=%RTbool fIntShadow=%RTbool fIntPending=%RTbool fNmiPending=%RTbool\n",
     3739              fGif, fBlockNmi, fIntShadow, VMCPU_FF_IS_ANY_SET(pVCpu, VMCPU_FF_INTERRUPT_APIC | VMCPU_FF_INTERRUPT_PIC),
    37413740              VMCPU_FF_IS_SET(pVCpu, VMCPU_FF_INTERRUPT_NMI)));
    37423741
     
    37513750        && !fBlockNmi)
    37523751    {
    3753         if (    fVirtualGif
     3752        if (    fGif
    37543753            && !fIntShadow)
    37553754        {
     
    37703769            VMCPU_FF_CLEAR(pVCpu, VMCPU_FF_INTERRUPT_NMI);
    37713770        }
    3772         else if (!fVirtualGif)
     3771        else if (!fGif)
    37733772            hmR0SvmSetCtrlIntercept(pVmcb, SVM_CTRL_INTERCEPT_STGI);
    37743773        else
     
    37913790             && !pVCpu->hm.s.fSingleInstruction)
    37923791    {
    3793         if (    fVirtualGif
     3792        if (    fGif
    37943793            && !fIntShadow
    37953794            &&  CPUMCanSvmNstGstTakePhysIntr(pVCpu, pCtx))
     
    38253824                STAM_COUNTER_INC(&pVCpu->hm.s.StatSwitchGuestIrq);
    38263825        }
    3827         else if (!fVirtualGif)
     3826        else if (!fGif)
    38283827            hmR0SvmSetCtrlIntercept(pVmcb, SVM_CTRL_INTERCEPT_STGI);
    38293828        else
  • trunk/src/VBox/VMM/VMMR3/EM.cpp

    r75683 r75759  
    18251825    *pfInjected      = false;
    18261826
    1827     PVM pVM  = pVCpu->CTX_SUFF(pVM);
    1828     Assert(pVCpu->cpum.GstCtx.hwvirt.fGif);
    1829     bool fVirtualGif = CPUMGetSvmNstGstVGif(&pVCpu->cpum.GstCtx);
     1827    PVM  pVM  = pVCpu->CTX_SUFF(pVM);
     1828    bool fGif = pVCpu->cpum.GstCtx.hwvirt.fGif;
    18301829#ifdef VBOX_WITH_RAW_MODE
    1831     fVirtualGif    &= !PATMIsPatchGCAddr(pVM, pVCpu->cpum.GstCtx.eip);
    1832 #endif
    1833     if (fVirtualGif)
     1830    fGif &= !PATMIsPatchGCAddr(pVM, pVCpu->cpum.GstCtx.eip);
     1831#endif
     1832    if (fGif)
    18341833    {
    18351834        if (CPUMCanSvmNstGstTakePhysIntr(pVCpu, &pVCpu->cpum.GstCtx))
注意: 瀏覽 TracChangeset 來幫助您使用更動檢視器

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