VirtualBox

Changeset 52067 in vbox


Ignore:
Timestamp:
Jul 17, 2014 7:13:28 AM (11 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
95069
Message:

VMM/HMVMXR0: Convert NMIs to TRPM as TRPM_TRAP and not TRPM_HARDWARE_INT.

File:
1 edited

Legend:

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

    r52066 r52067  
    68486848        switch (uVector)
    68496849        {
     6850            case X86_XCPT_NMI:
     6851                u32IntInfo |= (VMX_EXIT_INTERRUPTION_INFO_TYPE_NMI << VMX_EXIT_INTERRUPTION_INFO_TYPE_SHIFT);
     6852                break;
     6853
    68506854            case X86_XCPT_BP:
    68516855            case X86_XCPT_OF:
     
    68696873    else if (enmTrpmEvent == TRPM_HARDWARE_INT)
    68706874    {
    6871         if (uVector == X86_XCPT_NMI)
    6872             u32IntInfo |= (VMX_EXIT_INTERRUPTION_INFO_TYPE_NMI << VMX_EXIT_INTERRUPTION_INFO_TYPE_SHIFT);
    6873         else
    6874         {
    6875             uint32_t uEFlags = CPUMGetGuestEFlags(pVCpu);
    6876             if (!(uEFlags & X86_EFL_IF))
    6877                 return VERR_VMX_IPE_5;
    6878             u32IntInfo |= (VMX_EXIT_INTERRUPTION_INFO_TYPE_EXT_INT << VMX_EXIT_INTERRUPTION_INFO_TYPE_SHIFT);
    6879         }
     6875        /** @todo r=ramshankar: Make this a strict-build assert after this bug is
     6876         *        fixed. See @bugref{7317}. */
     6877        uint32_t uEFlags = CPUMGetGuestEFlags(pVCpu);
     6878        if (!(uEFlags & X86_EFL_IF))
     6879        {
     6880            Log4(("hmR0VmxTrpmTrapToPendingEvent: TRPM injecting an external interrupt when interrupts are disabled!?!"));
     6881            return VERR_VMX_IPE_5;
     6882        }
     6883
     6884        u32IntInfo |= (VMX_EXIT_INTERRUPTION_INFO_TYPE_EXT_INT << VMX_EXIT_INTERRUPTION_INFO_TYPE_SHIFT);
    68806885    }
    68816886    else if (enmTrpmEvent == TRPM_SOFTWARE_INT)
     
    69176922    {
    69186923        case VMX_IDT_VECTORING_INFO_TYPE_EXT_INT:
    6919         case VMX_IDT_VECTORING_INFO_TYPE_NMI:
    69206924           enmTrapType = TRPM_HARDWARE_INT;
    69216925           break;
     
    69256929            break;
    69266930
     6931        case VMX_IDT_VECTORING_INFO_TYPE_NMI:
    69276932        case VMX_IDT_VECTORING_INFO_TYPE_PRIV_SW_XCPT:
    69286933        case VMX_IDT_VECTORING_INFO_TYPE_SW_XCPT:      /* #BP and #OF */
Note: See TracChangeset for help on using the changeset viewer.

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