VirtualBox

Changeset 78869 in vbox for trunk/include/VBox


Ignore:
Timestamp:
May 30, 2019 8:32:28 AM (6 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
130981
Message:

VMM: Nested SVM: bugref:7243 Get rid of HMHasGuestSvmVmcbCached as a separate function call.

Location:
trunk/include/VBox/vmm
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • TabularUnified trunk/include/VBox/vmm/cpum.h

    r78866 r78869  
    17961796 *                      SVM_CTRL_INTERCEPT_*.
    17971797 */
    1798 DECLINLINE(bool) CPUMIsGuestSvmCtrlInterceptSet(PCVMCPU pVCpu, PCPUMCTX pCtx, uint64_t fIntercept)
     1798DECLINLINE(bool) CPUMIsGuestSvmCtrlInterceptSet(PCVMCPU pVCpu, PCCPUMCTX pCtx, uint64_t fIntercept)
    17991799{
    18001800    if (pCtx->hwvirt.enmHwvirt != CPUMHWVIRT_SVM)
    18011801        return false;
    1802     PCSVMVMCB pVmcb = pCtx->hwvirt.svm.CTX_SUFF(pVmcb); Assert(pVmcb);
    1803     if (HMHasGuestSvmVmcbCached(pVCpu))
    1804         return HMIsGuestSvmCtrlInterceptSet(pVCpu, fIntercept);
    1805     return RT_BOOL(pVmcb->ctrl.u64InterceptCtrl & fIntercept);
     1802    PCSVMVMCB pVmcb = pCtx->hwvirt.svm.CTX_SUFF(pVmcb);
     1803    Assert(pVmcb);
     1804    uint64_t u64Intercepts;
     1805    if (!HMGetGuestSvmCtrlIntercepts(pVCpu, &u64Intercepts))
     1806        u64Intercepts = pVmcb->ctrl.u64InterceptCtrl;
     1807    return RT_BOOL(u64Intercepts & fIntercept);
    18061808}
    18071809
     
    18191821    if (pCtx->hwvirt.enmHwvirt != CPUMHWVIRT_SVM)
    18201822        return false;
    1821     PCSVMVMCB pVmcb = pCtx->hwvirt.svm.CTX_SUFF(pVmcb); Assert(pVmcb);
    1822     if (HMHasGuestSvmVmcbCached(pVCpu))
    1823         return HMIsGuestSvmReadCRxInterceptSet(pVCpu, uCr);
    1824     return RT_BOOL(pVmcb->ctrl.u16InterceptRdCRx & (UINT16_C(1) << uCr));
     1823    PCSVMVMCB pVmcb = pCtx->hwvirt.svm.CTX_SUFF(pVmcb);
     1824    Assert(pVmcb);
     1825    uint16_t u16Intercepts;
     1826    if (!HMGetGuestSvmReadCRxIntercepts(pVCpu, &u16Intercepts))
     1827        u16Intercepts = pVmcb->ctrl.u16InterceptRdCRx;
     1828    return RT_BOOL(u16Intercepts & (UINT16_C(1) << uCr));
    18251829}
    18261830
     
    18381842    if (pCtx->hwvirt.enmHwvirt != CPUMHWVIRT_SVM)
    18391843        return false;
    1840     PCSVMVMCB pVmcb = pCtx->hwvirt.svm.CTX_SUFF(pVmcb); Assert(pVmcb);
    1841     if (HMHasGuestSvmVmcbCached(pVCpu))
    1842         return HMIsGuestSvmWriteCRxInterceptSet(pVCpu, uCr);
    1843     return RT_BOOL(pVmcb->ctrl.u16InterceptWrCRx & (UINT16_C(1) << uCr));
     1844    PCSVMVMCB pVmcb = pCtx->hwvirt.svm.CTX_SUFF(pVmcb);
     1845    Assert(pVmcb);
     1846    uint16_t u16Intercepts;
     1847    if (!HMGetGuestSvmWriteCRxIntercepts(pVCpu, &u16Intercepts))
     1848        u16Intercepts = pVmcb->ctrl.u16InterceptWrCRx;
     1849    return RT_BOOL(u16Intercepts & (UINT16_C(1) << uCr));
    18441850}
    18451851
     
    18571863    if (pCtx->hwvirt.enmHwvirt != CPUMHWVIRT_SVM)
    18581864        return false;
    1859     PCSVMVMCB pVmcb = pCtx->hwvirt.svm.CTX_SUFF(pVmcb); Assert(pVmcb);
    1860     if (HMHasGuestSvmVmcbCached(pVCpu))
    1861         return HMIsGuestSvmReadDRxInterceptSet(pVCpu, uDr);
    1862     return RT_BOOL(pVmcb->ctrl.u16InterceptRdDRx & (UINT16_C(1) << uDr));
     1865    PCSVMVMCB pVmcb = pCtx->hwvirt.svm.CTX_SUFF(pVmcb);
     1866    Assert(pVmcb);
     1867    uint16_t u16Intercepts;
     1868    if (!HMGetGuestSvmReadDRxIntercepts(pVCpu, &u16Intercepts))
     1869        u16Intercepts = pVmcb->ctrl.u16InterceptRdDRx;
     1870    return RT_BOOL(u16Intercepts & (UINT16_C(1) << uDr));
    18631871}
    18641872
     
    18761884    if (pCtx->hwvirt.enmHwvirt != CPUMHWVIRT_SVM)
    18771885        return false;
    1878     PCSVMVMCB pVmcb = pCtx->hwvirt.svm.CTX_SUFF(pVmcb); Assert(pVmcb);
    1879     if (HMHasGuestSvmVmcbCached(pVCpu))
    1880         return HMIsGuestSvmWriteDRxInterceptSet(pVCpu, uDr);
    1881     return RT_BOOL(pVmcb->ctrl.u16InterceptWrDRx & (UINT16_C(1) << uDr));
     1886    PCSVMVMCB pVmcb = pCtx->hwvirt.svm.CTX_SUFF(pVmcb);
     1887    Assert(pVmcb);
     1888    uint16_t u16Intercepts;
     1889    if (!HMGetGuestSvmWriteDRxIntercepts(pVCpu, &u16Intercepts))
     1890        u16Intercepts = pVmcb->ctrl.u16InterceptWrDRx;
     1891    return RT_BOOL(u16Intercepts & (UINT16_C(1) << uDr));
    18821892}
    18831893
     
    18921902DECLINLINE(bool) CPUMIsGuestSvmXcptInterceptSet(PCVMCPU pVCpu, PCCPUMCTX pCtx, uint8_t uVector)
    18931903{
    1894     Assert(uVector < 32);
     1904    Assert(uVector <= X86_XCPT_LAST);
    18951905    if (pCtx->hwvirt.enmHwvirt != CPUMHWVIRT_SVM)
    18961906        return false;
    1897     PCSVMVMCB pVmcb = pCtx->hwvirt.svm.CTX_SUFF(pVmcb); Assert(pVmcb);
    1898     if (HMHasGuestSvmVmcbCached(pVCpu))
    1899         return HMIsGuestSvmXcptInterceptSet(pVCpu, uVector);
    1900     return RT_BOOL(pVmcb->ctrl.u32InterceptXcpt & (UINT32_C(1) << uVector));
     1907    PCSVMVMCB pVmcb = pCtx->hwvirt.svm.CTX_SUFF(pVmcb);
     1908    Assert(pVmcb);
     1909    uint32_t u32Intercepts;
     1910    if (!HMGetGuestSvmXcptIntercepts(pVCpu, &u32Intercepts))
     1911        u32Intercepts = pVmcb->ctrl.u32InterceptXcpt;
     1912    return RT_BOOL(u32Intercepts & RT_BIT(uVector));
    19011913}
    19021914
     
    19141926    if (pCtx->hwvirt.enmHwvirt != CPUMHWVIRT_SVM)
    19151927        return false;
    1916     PCSVMVMCB pVmcb = pCtx->hwvirt.svm.CTX_SUFF(pVmcb); Assert(pVmcb);
    1917     if (HMHasGuestSvmVmcbCached(pVCpu))
    1918         return HMIsGuestSvmVirtIntrMasking(pVCpu);
    1919     return pVmcb->ctrl.IntCtrl.n.u1VIntrMasking;
     1928    PCSVMVMCB pVmcb = pCtx->hwvirt.svm.CTX_SUFF(pVmcb);
     1929    Assert(pVmcb);
     1930    bool fVIntrMasking;
     1931    if (!HMGetGuestSvmVirtIntrMasking(pVCpu, &fVIntrMasking))
     1932        fVIntrMasking = pVmcb->ctrl.IntCtrl.n.u1VIntrMasking;
     1933    return fVIntrMasking;
    19201934}
    19211935
     
    19331947    if (pCtx->hwvirt.enmHwvirt != CPUMHWVIRT_SVM)
    19341948        return false;
    1935     PCSVMVMCB pVmcb = pCtx->hwvirt.svm.CTX_SUFF(pVmcb); Assert(pVmcb);
    1936     if (HMHasGuestSvmVmcbCached(pVCpu))
    1937         return HMIsGuestSvmNestedPagingEnabled(pVCpu);
    1938     return pVmcb->ctrl.NestedPagingCtrl.n.u1NestedPaging;
     1949    PCSVMVMCB pVmcb = pCtx->hwvirt.svm.CTX_SUFF(pVmcb);
     1950    Assert(pVmcb);
     1951    bool fNestedPaging;
     1952    if (!HMGetGuestSvmNestedPaging(pVCpu, &fNestedPaging))
     1953        fNestedPaging = pVmcb->ctrl.NestedPagingCtrl.n.u1NestedPaging;
     1954    return fNestedPaging;
    19391955}
    19401956
     
    19521968    if (pCtx->hwvirt.enmHwvirt != CPUMHWVIRT_SVM)
    19531969        return false;
    1954     PCSVMVMCB pVmcb = pCtx->hwvirt.svm.CTX_SUFF(pVmcb); Assert(pVmcb);
    1955     if (HMHasGuestSvmVmcbCached(pVCpu))
    1956         return HMGetGuestSvmPauseFilterCount(pVCpu);
    1957     return pVmcb->ctrl.u16PauseFilterCount;
     1970    PCSVMVMCB pVmcb = pCtx->hwvirt.svm.CTX_SUFF(pVmcb);
     1971    Assert(pVmcb);
     1972    uint16_t u16PauseFilterCount;
     1973    if (!HMGetGuestSvmPauseFilterCount(pVCpu, &u16PauseFilterCount))
     1974        u16PauseFilterCount = pVmcb->ctrl.u16PauseFilterCount;
     1975    return u16PauseFilterCount;
    19581976}
    19591977
  • TabularUnified trunk/include/VBox/vmm/hm.h

    r78866 r78869  
    190190 * @{ */
    191191VMM_INT_DECL(bool)              HMIsSvmVGifActive(PVM pVM);
    192 VMM_INT_DECL(uint64_t)          HMApplySvmNstGstTscOffset(PCVMCPU pVCpu, uint64_t uTicks);
    193 VMM_INT_DECL(uint64_t)          HMRemoveSvmNstGstTscOffset(PCVMCPU pVCpu, uint64_t uTicks);
    194192# ifdef VBOX_WITH_NESTED_HWVIRT_SVM
    195193VMM_INT_DECL(void)              HMNotifySvmNstGstVmexit(PVMCPU pVCpu, PCPUMCTX pCtx);
     
    216214 * @{ */
    217215# define HMIsSvmVGifActive(pVM)                                       false
    218 # define HMApplySvmNstGstTscOffset(pVCpu, uTicks)                     (uTicks)
    219 # define HMRemoveSvmNstGstTscOffset(pVCpu, uTicks)                    (uTicks)
    220216# define HMNotifySvmNstGstVmexit(pVCpu, pCtx)                         do { } while (0)
    221217# define HMIsSubjectToSvmErratum170(puFamily, puModel, puStepping)    false
  • TabularUnified trunk/include/VBox/vmm/hm_svm.h

    r78865 r78869  
    11601160 * @{
    11611161 */
    1162 VMM_INT_DECL(bool)     HMHasGuestSvmVmcbCached(PCVMCPU pVCpu);
    1163 VMM_INT_DECL(bool)     HMIsGuestSvmCtrlInterceptSet(PCVMCPU pVCpu, uint64_t fIntercept);
    1164 VMM_INT_DECL(bool)     HMIsGuestSvmReadCRxInterceptSet(PCVMCPU pVCpu, uint8_t uCr);
    1165 VMM_INT_DECL(bool)     HMIsGuestSvmWriteCRxInterceptSet(PCVMCPU pVCpu, uint8_t uCr);
    1166 VMM_INT_DECL(bool)     HMIsGuestSvmReadDRxInterceptSet(PCVMCPU pVCpu, uint8_t uDr);
    1167 VMM_INT_DECL(bool)     HMIsGuestSvmWriteDRxInterceptSet(PCVMCPU pVCpu, uint8_t uDr);
    1168 VMM_INT_DECL(bool)     HMIsGuestSvmXcptInterceptSet(PCVMCPU pVCpu, uint8_t uVector);
    1169 VMM_INT_DECL(bool)     HMIsGuestSvmVirtIntrMasking(PCVMCPU pVCpu);
    1170 VMM_INT_DECL(bool)     HMIsGuestSvmNestedPagingEnabled(PCVMCPU pVCpu);
    1171 VMM_INT_DECL(uint16_t) HMGetGuestSvmPauseFilterCount(PCVMCPU pVCpu);
     1162VMM_INT_DECL(bool)     HMGetGuestSvmCtrlIntercepts(PCVMCPU pVCpu, uint64_t *pu64Intercepts);
     1163VMM_INT_DECL(bool)     HMGetGuestSvmReadCRxIntercepts(PCVMCPU pVCpu, uint16_t *pu16Intercepts);
     1164VMM_INT_DECL(bool)     HMGetGuestSvmWriteCRxIntercepts(PCVMCPU pVCpu, uint16_t *pu16Intercepts);
     1165VMM_INT_DECL(bool)     HMGetGuestSvmReadDRxIntercepts(PCVMCPU pVCpu, uint16_t *pu16Intercepts);
     1166VMM_INT_DECL(bool)     HMGetGuestSvmWriteDRxIntercepts(PCVMCPU pVCpu, uint16_t *pu16Intercepts);
     1167VMM_INT_DECL(bool)     HMGetGuestSvmXcptIntercepts(PCVMCPU pVCpu, uint32_t *pu32Intercepts);
     1168VMM_INT_DECL(bool)     HMGetGuestSvmVirtIntrMasking(PCVMCPU pVCpu, bool *pfVIntrMasking);
     1169VMM_INT_DECL(bool)     HMGetGuestSvmNestedPaging(PCVMCPU pVCpu, bool *pfNestedPagingCtrl);
     1170VMM_INT_DECL(bool)     HMGetGuestSvmPauseFilterCount(PCVMCPU pVCpu, uint16_t *pu16PauseFilterCount);
     1171VMM_INT_DECL(bool)     HMGetGuestSvmTscOffset(PCVMCPU pVCpu, uint64_t *pu64TscOffset);
    11721172/** @} */
    11731173
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