VirtualBox

Changeset 76876 in vbox


Ignore:
Timestamp:
Jan 18, 2019 8:35:13 AM (6 years ago)
Author:
vboxsync
Message:

VMM/HMVMXR0: Sped up IEM-only execution of VMX instructions by executing them in ring-0.

File:
1 edited

Legend:

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

    r76872 r76876  
    234234    } while (0)
    235235
     236# ifdef VBOX_WITH_NESTED_HWVIRT_ONLY_IN_IEM
     237/** Macro that executes a VMX instruction in IEM. */
     238#  define HMVMX_IEM_EXEC_VMX_INSTR_RET(a_pVCpu) \
     239    do { \
     240        int rc = HMVMX_CPUMCTX_IMPORT_STATE((a_pVCpu), HMVMX_CPUMCTX_EXTRN_ALL); \
     241        AssertRCReturn(rc, rc); \
     242        VBOXSTRICTRC rcStrict = IEMExecOne((a_pVCpu)); \
     243        if (rcStrict == VINF_SUCCESS) \
     244            ASMAtomicUoOrU64(&(a_pVCpu)->hm.s.fCtxChanged, HM_CHANGED_ALL_GUEST); \
     245        else if (rcStrict == VINF_IEM_RAISED_XCPT) \
     246        { \
     247            rcStrict = VINF_SUCCESS; \
     248            ASMAtomicUoOrU64(&(a_pVCpu)->hm.s.fCtxChanged, HM_CHANGED_RAISED_XCPT_MASK); \
     249        } \
     250        return VBOXSTRICTRC_VAL(rcStrict); \
     251    } while (0)
     252
     253# endif /* VBOX_WITH_NESTED_HWVIRT_ONLY_IN_IEM */
    236254#endif /* VBOX_WITH_NESTED_HWVIRT_VMX */
    237255
     
    1347513493    return rcStrict;
    1347613494#else
    13477     return VERR_EM_INTERPRETER;
     13495    HMVMX_IEM_EXEC_VMX_INSTR_RET(pVCpu);
    1347813496#endif
    1347913497}
     
    1349913517    return rcStrict;
    1350013518#else
    13501     return VERR_EM_INTERPRETER;
     13519    HMVMX_IEM_EXEC_VMX_INSTR_RET(pVCpu);
    1350213520#endif
    1350313521}
     
    1353813556    return rcStrict;
    1353913557#else
    13540     return VERR_EM_INTERPRETER;
     13558    HMVMX_IEM_EXEC_VMX_INSTR_RET(pVCpu);
    1354113559#endif
    1354213560}
     
    1357713595    return rcStrict;
    1357813596#else
    13579     return VERR_EM_INTERPRETER;
     13597    HMVMX_IEM_EXEC_VMX_INSTR_RET(pVCpu);
    1358013598#endif
    1358113599}
     
    1361713635    return rcStrict;
    1361813636#else
    13619     return VERR_EM_INTERPRETER;
     13637    HMVMX_IEM_EXEC_VMX_INSTR_RET(pVCpu);
    1362013638#endif
    1362113639}
     
    1364113659    return rcStrict;
    1364213660#else
    13643     return VERR_EM_INTERPRETER;
     13661    HMVMX_IEM_EXEC_VMX_INSTR_RET(pVCpu);
    1364413662#endif
    1364513663}
     
    1368113699    return rcStrict;
    1368213700#else
    13683     return VERR_EM_INTERPRETER;
     13701    HMVMX_IEM_EXEC_VMX_INSTR_RET(pVCpu);
    1368413702#endif
    1368513703}
     
    1371213730    return rcStrict;
    1371313731#else
    13714     return VERR_EM_INTERPRETER;
     13732    HMVMX_IEM_EXEC_VMX_INSTR_RET(pVCpu);
    1371513733#endif
    1371613734}
     
    1375113769    return rcStrict;
    1375213770#else
    13753     return VERR_EM_INTERPRETER;
     13771    HMVMX_IEM_EXEC_VMX_INSTR_RET(pVCpu);
    1375413772#endif
    1375513773}
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