儲存庫 vbox 的更動 75759
圖例:
- 未更動
- 新增
- 刪除
-
trunk/include/VBox/vmm/cpum.h
r75646 r75759 1433 1433 VMM_INT_DECL(bool) CPUMCanSvmNstGstTakeVirtIntr(PVMCPU pVCpu, PCCPUMCTX pCtx); 1434 1434 VMM_INT_DECL(uint8_t) CPUMGetSvmNstGstInterrupt(PCCPUMCTX pCtx); 1435 VMM_INT_DECL(bool) CPUMGetSvmNstGstVGif(PCCPUMCTX pCtx);1436 1435 VMM_INT_DECL(void) CPUMSvmVmExitRestoreHostState(PVMCPU pVCpu, PCPUMCTX pCtx); 1437 1436 VMM_INT_DECL(void) CPUMSvmVmRunSaveHostState(PCPUMCTX pCtx, uint8_t cbInstr); -
trunk/src/VBox/VMM/VMMAll/CPUMAllRegs.cpp
r75729 r75759 2844 2844 PCSVMVMCBCTRL pVmcbCtrl = &pCtx->hwvirt.svm.CTX_SUFF(pVmcb)->ctrl; 2845 2845 PCSVMINTCTRL pVmcbIntCtrl = &pVmcbCtrl->IntCtrl; 2846 Assert(!pVmcbIntCtrl->n.u1VGifEnable); /* We don't support passing virtual-GIF feature to the guest yet. */ 2846 2847 if ( !pVmcbIntCtrl->n.u1IgnoreTPR 2847 2848 && pVmcbIntCtrl->n.u4VIntrPrio <= pVmcbIntCtrl->n.u8VTPR) … … 2873 2874 PCSVMVMCBCTRL pVmcbCtrl = &pCtx->hwvirt.svm.CTX_SUFF(pVmcb)->ctrl; 2874 2875 return pVmcbCtrl->IntCtrl.n.u8VIntrVector; 2875 #endif2876 }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_RC2888 RT_NOREF(pCtx);2889 AssertReleaseFailedReturn(false);2890 #else2891 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;2896 2876 #endif 2897 2877 } -
trunk/src/VBox/VMM/VMMAll/HMSVMAll.cpp
r75611 r75759 186 186 bool const fVGif = RT_BOOL(pVM->hm.s.svm.u32Features & X86_CPUID_SVM_FEATURE_EDX_VGIF); 187 187 bool const fUseVGif = fVGif && pVM->hm.s.svm.fVGif; 188 189 return HMIsEnabled(pVM) && fVGif && fUseVGif; 188 return fVGif && fUseVGif; 190 189 } 191 190 -
trunk/src/VBox/VMM/VMMAll/IEMAllCImplSvmInstr.cpp.h
r75638 r75759 340 340 # if defined(VBOX_WITH_NESTED_HWVIRT_ONLY_IN_IEM) && defined(IN_RING3) 341 341 /* 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))) 343 344 return EMR3SetExecutionPolicy(pVCpu->CTX_SUFF(pVM)->pUVM, EMEXECPOLICY_IEM_ALL, false); 344 345 # endif … … 840 841 # if defined(VBOX_WITH_NESTED_HWVIRT_ONLY_IN_IEM) && defined(IN_RING3) 841 842 /* 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)) 843 845 return EMR3SetExecutionPolicy(pVCpu->CTX_SUFF(pVM)->pUVM, EMEXECPOLICY_IEM_ALL, true); 844 846 # endif -
trunk/src/VBox/VMM/VMMR0/HMSVMR0.cpp
r75611 r75759 2444 2444 if (pVmcb->ctrl.IntCtrl.n.u1VGifEnable) 2445 2445 { 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. */ 2447 2448 pVmcb->ctrl.IntCtrl.n.u1VGif = pCtx->hwvirt.fGif; 2448 2449 } … … 2794 2795 if (fWhat & CPUMCTX_EXTRN_HWVIRT) 2795 2796 { 2796 if ( !CPUMIsGuestInSvmNestedHwVirtMode(pCtx) 2797 && pVmcbCtrl->IntCtrl.n.u1VGifEnable) 2797 if (pVmcbCtrl->IntCtrl.n.u1VGifEnable) 2798 2798 { 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. */ 2801 2801 pCtx->hwvirt.fGif = pVmcbCtrl->IntCtrl.n.u1VGif; 2802 2802 } … … 3729 3729 3730 3730 Assert(!pVCpu->hm.s.Event.fPending); 3731 Assert(pCtx->hwvirt.fGif);3732 3731 PSVMVMCB pVmcb = hmR0SvmGetCurrentVmcb(pVCpu); 3733 3732 Assert(pVmcb); 3734 3733 3735 bool const f VirtualGif = CPUMGetSvmNstGstVGif(pCtx);3734 bool const fGif = pCtx->hwvirt.fGif; 3736 3735 bool const fIntShadow = hmR0SvmIsIntrShadowActive(pVCpu); 3737 3736 bool const fBlockNmi = VMCPU_FF_IS_SET(pVCpu, VMCPU_FF_BLOCK_NMIS); 3738 3737 3739 Log4Func(("f VirtualGif=%RTbool fBlockNmi=%RTbool fIntShadow=%RTbool fIntPending=%RTbool fNmiPending=%RTbool\n",3740 f VirtualGif, 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), 3741 3740 VMCPU_FF_IS_SET(pVCpu, VMCPU_FF_INTERRUPT_NMI))); 3742 3741 … … 3751 3750 && !fBlockNmi) 3752 3751 { 3753 if ( f VirtualGif3752 if ( fGif 3754 3753 && !fIntShadow) 3755 3754 { … … 3770 3769 VMCPU_FF_CLEAR(pVCpu, VMCPU_FF_INTERRUPT_NMI); 3771 3770 } 3772 else if (!f VirtualGif)3771 else if (!fGif) 3773 3772 hmR0SvmSetCtrlIntercept(pVmcb, SVM_CTRL_INTERCEPT_STGI); 3774 3773 else … … 3791 3790 && !pVCpu->hm.s.fSingleInstruction) 3792 3791 { 3793 if ( f VirtualGif3792 if ( fGif 3794 3793 && !fIntShadow 3795 3794 && CPUMCanSvmNstGstTakePhysIntr(pVCpu, pCtx)) … … 3825 3824 STAM_COUNTER_INC(&pVCpu->hm.s.StatSwitchGuestIrq); 3826 3825 } 3827 else if (!f VirtualGif)3826 else if (!fGif) 3828 3827 hmR0SvmSetCtrlIntercept(pVmcb, SVM_CTRL_INTERCEPT_STGI); 3829 3828 else -
trunk/src/VBox/VMM/VMMR3/EM.cpp
r75683 r75759 1825 1825 *pfInjected = false; 1826 1826 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; 1830 1829 #ifdef VBOX_WITH_RAW_MODE 1831 f VirtualGif&= !PATMIsPatchGCAddr(pVM, pVCpu->cpum.GstCtx.eip);1832 #endif 1833 if (f VirtualGif)1830 fGif &= !PATMIsPatchGCAddr(pVM, pVCpu->cpum.GstCtx.eip); 1831 #endif 1832 if (fGif) 1834 1833 { 1835 1834 if (CPUMCanSvmNstGstTakePhysIntr(pVCpu, &pVCpu->cpum.GstCtx))
注意:
瀏覽 TracChangeset
來幫助您使用更動檢視器