VirtualBox

Changeset 52072 in vbox for trunk/src


Ignore:
Timestamp:
Jul 17, 2014 11:28:01 AM (11 years ago)
Author:
vboxsync
Message:

VMM/HMVMXR0: Fix NMI injection.

File:
1 edited

Legend:

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

    r52067 r52072  
    58225822                    enmReflect = VMXREFLECTXCPT_TF;
    58235823            }
    5824             else if (   uIntType == VMX_IDT_VECTORING_INFO_TYPE_NMI
    5825                      && (pVCpu->hm.s.vmx.u32PinCtls & VMX_VMCS_CTRL_PIN_EXEC_VIRTUAL_NMI))
     5824            else if (   uIntType == VMX_IDT_VECTORING_INFO_TYPE_HW_XCPT
     5825                     || uIntType == VMX_IDT_VECTORING_INFO_TYPE_EXT_INT
     5826                     || uIntType == VMX_IDT_VECTORING_INFO_TYPE_NMI)
     5827            {
     5828                /*
     5829                 * Ignore software interrupts (INT n), software exceptions (#BP, #OF) and
     5830                 * privileged software exception (#DB from ICEBP) as they reoccur when restarting the instruction.
     5831                 */
     5832                enmReflect = VMXREFLECTXCPT_XCPT;
     5833            }
     5834        }
     5835        else
     5836        {
     5837            /*
     5838             * If event delivery caused an EPT violation/misconfig or APIC access VM-exit, then the VM-exit
     5839             * interruption-information will not be valid and we end up here. In such cases, it is sufficient to reflect the
     5840             * original exception to the guest after handling the VM-exit.
     5841             */
     5842            if (   uIntType == VMX_IDT_VECTORING_INFO_TYPE_NMI
     5843                && (pVCpu->hm.s.vmx.u32PinCtls & VMX_VMCS_CTRL_PIN_EXEC_VIRTUAL_NMI))
    58265844            {
    58275845                /*
     
    58375855                     || uIntType == VMX_IDT_VECTORING_INFO_TYPE_EXT_INT
    58385856                     || uIntType == VMX_IDT_VECTORING_INFO_TYPE_NMI)
    5839             {
    5840                 /*
    5841                  * Ignore software interrupts (INT n), software exceptions (#BP, #OF) and
    5842                  * privileged software exception (#DB from ICEBP) as they reoccur when restarting the instruction.
    5843                  */
    5844                 enmReflect = VMXREFLECTXCPT_XCPT;
    5845             }
    5846         }
    5847         else
    5848         {
    5849             /*
    5850              * If event delivery caused an EPT violation/misconfig or APIC access VM-exit, then the VM-exit
    5851              * interruption-information will not be valid and we end up here. In such cases, it is sufficient to reflect the
    5852              * original exception to the guest after handling the VM-exit.
    5853              */
    5854             if (   uIntType == VMX_IDT_VECTORING_INFO_TYPE_HW_XCPT
    5855                 || uIntType == VMX_IDT_VECTORING_INFO_TYPE_EXT_INT
    5856                 || uIntType == VMX_IDT_VECTORING_INFO_TYPE_NMI)
    58575857            {
    58585858                enmReflect = VMXREFLECTXCPT_XCPT;
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