VirtualBox

Changeset 78920 in vbox for trunk/src/VBox/VMM


Ignore:
Timestamp:
Jun 3, 2019 7:47:17 AM (6 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
131040
Message:

VMM/IEM: Nested VMX: bugref:9180 Fix NMI-window VM-exit checks.

File:
1 edited

Legend:

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

    r78877 r78920  
    1404814048        && CPUMIsGuestInVmxNonRootMode(IEM_GET_CTX(pVCpu)))
    1404914049    {
     14050        bool fCheckRemainingIntercepts = true;
    1405014051        /* TPR-below threshold/APIC write has the highest priority. */
    1405114052        if (VMCPU_FF_IS_SET(pVCpu, VMCPU_FF_VMX_APIC_WRITE))
    1405214053        {
    1405314054            rcStrict = iemVmxApicWriteEmulation(pVCpu);
     14055            fCheckRemainingIntercepts = false;
    1405414056            Assert(!VMCPU_FF_IS_SET(pVCpu, VMCPU_FF_INHIBIT_INTERRUPTS));
    1405514057            Assert(!VMCPU_FF_IS_SET(pVCpu, VMCPU_FF_VMX_APIC_WRITE));
     
    1405914061        {
    1406014062            rcStrict = iemVmxVmexit(pVCpu, VMX_EXIT_MTF);
     14063            fCheckRemainingIntercepts = false;
    1406114064            Assert(!VMCPU_FF_IS_SET(pVCpu, VMCPU_FF_INHIBIT_INTERRUPTS));
    1406214065            Assert(!VMCPU_FF_IS_SET(pVCpu, VMCPU_FF_VMX_MTF));
     
    1407014073            else
    1407114074            {
     14075                fCheckRemainingIntercepts = false;
    1407214076                Assert(!VMCPU_FF_IS_SET(pVCpu, VMCPU_FF_INHIBIT_INTERRUPTS));
    1407314077                Assert(!VMCPU_FF_IS_SET(pVCpu, VMCPU_FF_VMX_PREEMPT_TIMER));
    1407414078            }
    1407514079        }
     14080
    1407614081        /* NMI-window VM-exit. */
    14077         else if (VMCPU_FF_IS_SET(pVCpu, VMCPU_FF_VMX_NMI_WINDOW))
     14082        if (    fCheckRemainingIntercepts
     14083             && pVCpu->cpum.GstCtx.hwvirt.vmx.fInterceptEvents     /* Event injection during VM-entry takes priority. */
     14084             && VMCPU_FF_IS_SET(pVCpu, VMCPU_FF_VMX_NMI_WINDOW)
     14085             && !VMCPU_FF_IS_SET(pVCpu, VMCPU_FF_INHIBIT_INTERRUPTS)
     14086             && !CPUMIsGuestNmiBlocking(pVCpu))
    1407814087        {
    1407914088            rcStrict = iemVmxVmexit(pVCpu, VMX_EXIT_NMI_WINDOW);
     
    1439314402    bool fIntrEnabled = pVCpu->cpum.GstCtx.eflags.Bits.u1IF;
    1439414403#endif
     14404
     14405    /** @todo What if we are injecting an exception and not an interrupt? Is that
     14406     *        possible here? */
    1439514407    if (   fIntrEnabled
    1439614408        && TRPMHasTrap(pVCpu)
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