VirtualBox

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


Ignore:
Timestamp:
Jul 9, 2019 4:43:00 AM (6 years ago)
Author:
vboxsync
Message:

VMM/HMVMXR0: Nested VMX: bugref:9180 Add newly added StatInjectPendingNPF, comments.

File:
1 edited

Legend:

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

    r79601 r79626  
    1480414804    {
    1480514805        if (rcStrict == VINF_HM_DOUBLE_FAULT)
     14806        {
     14807            Assert(pVCpu->hm.s.Event.fPending);
    1480614808            rcStrict = VINF_SUCCESS;
     14809        }
    1480714810        STAM_PROFILE_ADV_STOP(&pVCpu->hm.s.StatExitXcptNmi, y3);
    1480814811        return rcStrict;
     
    1619816201    {
    1619916202        if (rcStrict1 == VINF_HM_DOUBLE_FAULT)
     16203        {
     16204            Assert(pVCpu->hm.s.Event.fPending);
    1620016205            rcStrict1 = VINF_SUCCESS;
     16206        }
    1620116207        return rcStrict1;
    1620216208    }
     
    1636116367    {
    1636216368        /*
    16363          * If event delivery causes an EPT misconfig (MMIO), go back to instruction emulation. Otherwise,
    16364          * injecting the original event would most likely cause the same EPT misconfig VM-exit again.
     16369         * In the unlikely case where delivering an event causes an EPT misconfig (MMIO), go back to
     16370         * instruction emulation to inject the original event. Otherwise, injecting the original event
     16371         * using hardware-assisted VMX would would trigger the same EPT misconfig VM-exit again.
    1636516372         */
    1636616373        if (RT_UNLIKELY(pVCpu->hm.s.Event.fPending))
     
    1644816455    if (RT_LIKELY(rcStrict1 == VINF_SUCCESS))
    1644916456    {
    16450         /* In the unlikely case that the EPT violation happened as a result of delivering an event, log it. */
    16451         if (RT_UNLIKELY(pVCpu->hm.s.Event.fPending))
    16452             Log4Func(("EPT violation with an event pending u64IntInfo=%#RX64\n", pVCpu->hm.s.Event.u64IntInfo));
     16457        /*
     16458         * If delivery of an event causes an EPT violation (true nested #PF and not MMIO),
     16459         * we shall resolve the nested #PF and re-inject the original event.
     16460         */
     16461        if (pVCpu->hm.s.Event.fPending)
     16462            STAM_COUNTER_INC(&pVCpu->hm.s.StatInjectPendingNPF);
    1645316463    }
    1645416464    else
    1645516465    {
    1645616466        if (rcStrict1 == VINF_HM_DOUBLE_FAULT)
     16467        {
     16468            Assert(pVCpu->hm.s.Event.fPending);
    1645716469            rcStrict1 = VINF_SUCCESS;
     16470        }
    1645816471        return rcStrict1;
    1645916472    }
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