VirtualBox

Changeset 79638 in vbox


Ignore:
Timestamp:
Jul 9, 2019 9:09:02 AM (5 years ago)
Author:
vboxsync
Message:

VMM/IEM: Nested VMX: bugref:9180 Use common code to convert VMX to TRPM event.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/VMM/VMMAll/IEMAllCImplVmxInstr.cpp.h

    r79600 r79638  
    69996999    Assert(VMX_ENTRY_INT_INFO_IS_VALID(uEntryIntInfo));
    70007000
    7001     uint8_t const uType         = VMX_ENTRY_INT_INFO_TYPE(uEntryIntInfo);
    7002     uint8_t const uVector       = VMX_ENTRY_INT_INFO_VECTOR(uEntryIntInfo);
    7003     bool const    fErrCodeValid = VMX_ENTRY_INT_INFO_IS_ERROR_CODE_VALID(uEntryIntInfo);
    7004 
    7005     TRPMEVENT enmTrapType;
    7006     switch (uType)
    7007     {
    7008         case VMX_ENTRY_INT_INFO_TYPE_EXT_INT:
    7009            enmTrapType = TRPM_HARDWARE_INT;
    7010            break;
    7011 
    7012         case VMX_ENTRY_INT_INFO_TYPE_NMI:
    7013         case VMX_ENTRY_INT_INFO_TYPE_HW_XCPT:
    7014             enmTrapType = TRPM_TRAP;
    7015             break;
    7016 
    7017         case VMX_ENTRY_INT_INFO_TYPE_SW_INT:
    7018             enmTrapType = TRPM_SOFTWARE_INT;
    7019             break;
    7020 
    7021         case VMX_ENTRY_INT_INFO_TYPE_SW_XCPT:       /* #BP and #OF */
    7022             Assert(uVector == X86_XCPT_BP || uVector == X86_XCPT_OF);
    7023             enmTrapType = TRPM_SOFTWARE_INT;
    7024             break;
    7025 
    7026         case VMX_ENTRY_INT_INFO_TYPE_PRIV_SW_XCPT:  /* #DB (INT1/ICEBP). */
    7027             Assert(uVector == X86_XCPT_DB);
    7028             enmTrapType = TRPM_SOFTWARE_INT;
    7029             break;
    7030 
    7031         default:
    7032             /* Shouldn't really happen. */
    7033             AssertMsgFailedReturn(("Invalid trap type %#x\n", uType), VERR_VMX_IPE_4);
    7034             break;
    7035     }
    7036 
    7037     int rc = TRPMAssertTrap(pVCpu, uVector, enmTrapType);
     7001    uint8_t const   uVector      = VMX_ENTRY_INT_INFO_VECTOR(uEntryIntInfo);
     7002    TRPMEVENT const enmTrpmEvent = HMVmxEventTypeToTrpmEventType(uEntryIntInfo);
     7003
     7004    int rc = TRPMAssertTrap(pVCpu, uVector, enmTrpmEvent);
    70387005    if (RT_SUCCESS(rc))
    70397006    {
    7040         if (fErrCodeValid)
     7007        if (VMX_ENTRY_INT_INFO_IS_ERROR_CODE_VALID(uEntryIntInfo))
    70417008            TRPMSetErrorCode(pVCpu, uErrCode);
    70427009
    7043         if (   enmTrapType == TRPM_TRAP
    7044             && uVector     == X86_XCPT_PF)
     7010        if (VMX_ENTRY_INT_INFO_IS_XCPT_PF(uEntryIntInfo))
    70457011            TRPMSetFaultAddress(pVCpu, GCPtrFaultAddress);
    7046         else if (enmTrapType == TRPM_SOFTWARE_INT)
     7012        else if (VMX_ENTRY_INT_INFO_TYPE(uEntryIntInfo) == VMX_ENTRY_INT_INFO_TYPE_SW_INT)
    70477013            TRPMSetInstrLength(pVCpu, cbInstr);
    70487014    }
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