VirtualBox

Changeset 80460 in vbox for trunk/src/VBox


Ignore:
Timestamp:
Aug 28, 2019 8:43:07 AM (5 years ago)
Author:
vboxsync
Message:

VMM/EM: Nested VMX: bugref:9180 Optimize VMX FF processing a bit.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/VMM/VMMR3/EM.cpp

    r80363 r80460  
    20052005
    20062006#ifdef VBOX_WITH_NESTED_HWVIRT_VMX
    2007         /*
    2008          * VMX Nested-guest APIC-write pending (can cause VM-exits).
    2009          * Takes priority over even SMI and INIT signals.
    2010          * See Intel spec. 29.4.3.2 "APIC-Write Emulation".
    2011          */
    2012         if (VMCPU_FF_IS_SET(pVCpu, VMCPU_FF_VMX_APIC_WRITE))
    2013         {
    2014             rc2 = VBOXSTRICTRC_VAL(IEMExecVmxVmexitApicWrite(pVCpu));
    2015             if (rc2 != VINF_VMX_INTERCEPT_NOT_ACTIVE)
     2007        if (VMCPU_FF_IS_ANY_SET(pVCpu, VMCPU_FF_VMX_APIC_WRITE | VMCPU_FF_VMX_MTF | VMCPU_FF_VMX_PREEMPT_TIMER))
     2008        {
     2009            /*
     2010             * VMX Nested-guest APIC-write pending (can cause VM-exits).
     2011             * Takes priority over even SMI and INIT signals.
     2012             * See Intel spec. 29.4.3.2 "APIC-Write Emulation".
     2013             */
     2014            if (VMCPU_FF_IS_SET(pVCpu, VMCPU_FF_VMX_APIC_WRITE))
     2015            {
     2016                rc2 = VBOXSTRICTRC_VAL(IEMExecVmxVmexitApicWrite(pVCpu));
     2017                if (rc2 != VINF_VMX_INTERCEPT_NOT_ACTIVE)
     2018                    UPDATE_RC();
     2019            }
     2020
     2021            /*
     2022             * VMX Nested-guest monitor-trap flag (MTF) VM-exit.
     2023             * Takes priority over "Traps on the previous instruction".
     2024             * See Intel spec. 6.9 "Priority Among Simultaneous Exceptions And Interrupts".
     2025             */
     2026            if (VMCPU_FF_IS_SET(pVCpu, VMCPU_FF_VMX_MTF))
     2027            {
     2028                rc2 = VBOXSTRICTRC_VAL(IEMExecVmxVmexit(pVCpu, VMX_EXIT_MTF, 0 /* uExitQual */));
     2029                Assert(rc2 != VINF_VMX_INTERCEPT_NOT_ACTIVE);
    20162030                UPDATE_RC();
    2017         }
    2018 
    2019         /*
    2020          * VMX Nested-guest monitor-trap flag (MTF) VM-exit.
    2021          * Takes priority over "Traps on the previous instruction".
    2022          * See Intel spec. 6.9 "Priority Among Simultaneous Exceptions And Interrupts".
    2023          */
    2024         if (VMCPU_FF_IS_SET(pVCpu, VMCPU_FF_VMX_MTF))
    2025         {
    2026             rc2 = VBOXSTRICTRC_VAL(IEMExecVmxVmexit(pVCpu, VMX_EXIT_MTF, 0 /* uExitQual */));
    2027             Assert(rc2 != VINF_VMX_INTERCEPT_NOT_ACTIVE);
    2028             UPDATE_RC();
    2029         }
    2030 
    2031         /*
    2032          * VMX Nested-guest preemption timer VM-exit.
    2033          * Takes priority over NMI-window VM-exits.
    2034          */
    2035         if (VMCPU_FF_IS_SET(pVCpu, VMCPU_FF_VMX_PREEMPT_TIMER))
    2036         {
    2037             rc2 = VBOXSTRICTRC_VAL(IEMExecVmxVmexitPreemptTimer(pVCpu));
    2038             if (rc2 != VINF_VMX_INTERCEPT_NOT_ACTIVE)
    2039                 UPDATE_RC();
     2031            }
     2032
     2033            /*
     2034             * VMX Nested-guest preemption timer VM-exit.
     2035             * Takes priority over NMI-window VM-exits.
     2036             */
     2037            if (VMCPU_FF_IS_SET(pVCpu, VMCPU_FF_VMX_PREEMPT_TIMER))
     2038            {
     2039                rc2 = VBOXSTRICTRC_VAL(IEMExecVmxVmexitPreemptTimer(pVCpu));
     2040                if (rc2 != VINF_VMX_INTERCEPT_NOT_ACTIVE)
     2041                    UPDATE_RC();
     2042            }
    20402043        }
    20412044#endif
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