VirtualBox

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


Ignore:
Timestamp:
Dec 5, 2018 8:06:38 AM (6 years ago)
Author:
vboxsync
Message:

VMM: Nested VMX: bugref:9180 Added APIC-write emulation VM-exit and enabled NMI delivery in the ring-3 EM loop.

Location:
trunk/src/VBox/VMM
Files:
2 edited

Legend:

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

    r75830 r75957  
    1571615716
    1571715717/**
    15718  * Interface for HM and EM to perform a APIC-write emulation.
     15718 * Interface for HM and EM to perform an APIC-write emulation which may cause a
     15719 * VM-exit.
    1571915720 *
    1572015721 * @returns Strict VBox status code.
     
    1572215723 * @thread  EMT(pVCpu)
    1572315724 */
    15724 VMM_INT_DECL(VBOXSTRICTRC) IEMExecVmxVirtApicWriteEmulation(PVMCPU pVCpu)
     15725VMM_INT_DECL(VBOXSTRICTRC) IEMExecVmxVmexitApicWrite(PVMCPU pVCpu)
    1572515726{
    1572615727    IEM_CTX_ASSERT(pVCpu, IEM_CPUMCTX_EXTRN_VMX_VMEXIT_MASK);
  • trunk/src/VBox/VMM/VMMR3/EM.cpp

    r75917 r75957  
    21112111        }
    21122112
    2113         /* SMIs take priority over if we ever support them will have to be injected here. */
     2113#ifdef VBOX_WITH_NESTED_HWVIRT_VMX
     2114        /*
     2115         * VMX Nested-guest APIC-write VM-exit.
     2116         * Takes priority over SMI, INIT signals.
     2117         * See Intel spec. 29.4.3.2 "APIC-Write Emulation".
     2118         */
     2119        if (VMCPU_FF_IS_SET(pVCpu, VMCPU_FF_VMX_APIC_WRITE))
     2120        {
     2121            rc2 = VBOXSTRICTRC_VAL(IEMExecVmxVmexitApicWrite(pVCpu));
     2122            if (rc2 != VINF_VMX_INTERCEPT_NOT_ACTIVE)
     2123                UPDATE_RC();
     2124        }
     2125#endif
     2126
     2127        /** @todo SMIs. If we implement SMIs, this is where they will have to be
     2128         *        delivered. */
    21142129
    21152130#ifdef VBOX_WITH_NESTED_HWVIRT_VMX
     
    21382153#endif
    21392154
    2140         /** @todo Enable when I get time to test this specific code path later. */
    2141 #if 0
    21422155        /*
    21432156         * NMIs.
     
    21622175                }
    21632176            }
    2164         }
    2165 #endif
     2177            UPDATE_RC();
     2178        }
    21662179
    21672180        /*
    21682181         * Interrupts.
    21692182         */
    2170         bool fWakeupPending = false;
    21712183        if (   !VM_FF_IS_SET(pVM, VM_FF_PGM_NO_MEMORY)
    21722184            && (!rc || rc >= VINF_EM_RESCHEDULE_HM)
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