VirtualBox

Changeset 52099 in vbox


Ignore:
Timestamp:
Jul 18, 2014 12:20:54 PM (11 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
95110
Message:

VMM/HMSVMR0: Attempt at fixing NMI injection and handling NMI reflection while delivering an event.

File:
1 edited

Legend:

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

    r52068 r52099  
    25972597
    25982598            hmR0SvmSetPendingEvent(pVCpu, &Event, 0 /* GCPtrFaultAddress */);
     2599            hmR0SvmSetIretIntercept(pVmcb);
    25992600            VMCPU_FF_CLEAR(pVCpu, VMCPU_FF_INTERRUPT_NMI);
    26002601        }
     
    40264027
    40274028        SVMREFLECTXCPT enmReflect = SVMREFLECTXCPT_NONE;
     4029        bool fReflectingNmi = false;
    40284030        if (pVmcb->ctrl.ExitIntInfo.n.u3Type == SVM_EVENT_EXCEPTION)
    40294031        {
     
    40764078            /* Ignore software interrupts (INT n) as they reoccur when restarting the instruction. */
    40774079            enmReflect = SVMREFLECTXCPT_XCPT;
     4080            fReflectingNmi = RT_BOOL(pVmcb->ctrl.ExitIntInfo.n.u3Type == SVM_EVENT_NMI);
    40784081        }
    40794082
     
    40824085            case SVMREFLECTXCPT_XCPT:
    40834086            {
     4087                /* If we are re-injecting the NMI, clear NMI blocking. */
     4088                if (fReflectingNmi)
     4089                    VMCPU_FF_CLEAR(pVCpu, VMCPU_FF_BLOCK_NMIS);
     4090
    40844091                Assert(pVmcb->ctrl.ExitIntInfo.n.u3Type != SVM_EVENT_SOFTWARE_INT);
    40854092                hmR0SvmSetPendingEvent(pVCpu, &pVmcb->ctrl.ExitIntInfo, 0 /* GCPtrFaultAddress */);
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