Changeset 75997 in vbox
- Timestamp:
- Dec 6, 2018 6:45:19 AM (6 years ago)
- Location:
- trunk
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/include/VBox/vmm/vm.h
r75830 r75997 592 592 #define VM_FF_HIGH_PRIORITY_POST_MASK ( VM_FF_PGM_NO_MEMORY ) 593 593 /** High priority post-execution actions. */ 594 #define VMCPU_FF_HIGH_PRIORITY_POST_MASK ( VMCPU_FF_PDM_CRITSECT | VM_WHEN_RAW_MODE(VMCPU_FF_CSAM_PENDING_ACTION, 0) \595 | VMCPU_FF_HM_UPDATE_CR3 | VMCPU_FF_HM_UPDATE_PAE_PDPES \596 | VMCPU_FF_ IEM| VMCPU_FF_IOM )594 #define VMCPU_FF_HIGH_PRIORITY_POST_MASK ( VMCPU_FF_PDM_CRITSECT | VM_WHEN_RAW_MODE(VMCPU_FF_CSAM_PENDING_ACTION, 0) \ 595 | VMCPU_FF_HM_UPDATE_CR3 | VMCPU_FF_HM_UPDATE_PAE_PDPES \ 596 | VMCPU_FF_VMX_APIC_WRITE | VMCPU_FF_IEM | VMCPU_FF_IOM ) 597 597 598 598 /** Normal priority VM post-execution actions. */ … … 631 631 | VMCPU_FF_INTERRUPT_APIC | VMCPU_FF_UPDATE_APIC | VMCPU_FF_INTERRUPT_PIC \ 632 632 | VMCPU_FF_INTERRUPT_NMI | VMCPU_FF_INTERRUPT_SMI | VMCPU_FF_PDM_CRITSECT \ 633 | VMCPU_FF_TIMER | VMCPU_FF_REQUEST ) 633 | VMCPU_FF_TIMER | VMCPU_FF_REQUEST \ 634 | VMCPU_FF_INTERRUPT_NESTED_GUEST ) 634 635 /** VMCPU flags that cause the REP[|NE|E] STRINS loops to yield, interrupts 635 636 * disabled. */ 636 637 #define VMCPU_FF_YIELD_REPSTR_NOINT_MASK ( VMCPU_FF_YIELD_REPSTR_MASK \ 637 & ~(VMCPU_FF_INTERRUPT_APIC | VMCPU_FF_UPDATE_APIC | VMCPU_FF_INTERRUPT_PIC) ) 638 & ~( VMCPU_FF_INTERRUPT_APIC | VMCPU_FF_UPDATE_APIC | VMCPU_FF_INTERRUPT_PIC \ 639 | VMCPU_FF_INTERRUPT_NESTED_GUEST) ) 638 640 639 641 /** VM Flags that cause the HM loops to go back to ring-3. */ -
trunk/src/VBox/VMM/VMMR3/EM.cpp
r75960 r75997 1695 1695 } 1696 1696 1697 #ifdef VBOX_WITH_NESTED_HWVIRT_VMX 1698 /* 1699 * VMX Nested-guest APIC-write pending (can cause VM-exits). 1700 * Takes priority over even SMI and INIT signals. 1701 * See Intel spec. 29.4.3.2 "APIC-Write Emulation". 1702 */ 1703 if (VMCPU_FF_IS_SET(pVCpu, VMCPU_FF_VMX_APIC_WRITE)) 1704 { 1705 rc = VBOXSTRICTRC_VAL(IEMExecVmxVmexitApicWrite(pVCpu)); 1706 Assert(rc != VINF_VMX_INTERCEPT_NOT_ACTIVE); 1707 } 1708 #endif 1709 1697 1710 #ifdef VBOX_WITH_RAW_MODE 1698 1711 if (VMCPU_FF_IS_SET(pVCpu, VMCPU_FF_CSAM_PENDING_ACTION)) … … 2111 2124 } 2112 2125 2113 #ifdef VBOX_WITH_NESTED_HWVIRT_VMX2114 /*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 rc2 = VINF_SUCCESS;2124 UPDATE_RC();2125 }2126 #endif2127 2128 2126 /** @todo SMIs. If we implement SMIs, this is where they will have to be 2129 2127 * delivered. */ … … 2195 2193 if (fGif) 2196 2194 { 2197 /* In VMX, virtual interrupt takes priority over physical interrupts. */ 2195 /* 2196 * With VMX, virtual interrupts takes priority over physical interrupts. 2197 * With SVM, physical interrupts takes priority over virtual interrupts. 2198 */ 2198 2199 if ( VMCPU_FF_IS_SET(pVCpu, VMCPU_FF_INTERRUPT_NESTED_GUEST) 2199 2200 && CPUMIsGuestInVmxNonRootMode(&pVCpu->cpum.GstCtx) … … 2203 2204 rc2 = VINF_NO_CHANGE; 2204 2205 } 2205 /* In SVM, physical interrupts take priority over virtual interrupts. */2206 2206 else if ( VMCPU_FF_IS_ANY_SET(pVCpu, VMCPU_FF_INTERRUPT_APIC | VMCPU_FF_INTERRUPT_PIC) 2207 2207 && CPUMIsGuestPhysIntrEnabled(pVCpu)) … … 2918 2918 2919 2919 if (VMCPU_FF_IS_ANY_SET(pVCpu, VMCPU_FF_INTERRUPT_APIC | VMCPU_FF_INTERRUPT_PIC 2920 | VMCPU_FF_INTERRUPT_NESTED_GUEST 2920 2921 | VMCPU_FF_INTERRUPT_NMI | VMCPU_FF_INTERRUPT_SMI | VMCPU_FF_UNHALT)) 2921 2922 {
Note:
See TracChangeset
for help on using the changeset viewer.