Changeset 75657 in vbox for trunk/src/VBox/VMM/VMMR3
- Timestamp:
- Nov 22, 2018 6:58:18 AM (6 years ago)
- svn:sync-xref-src-repo-rev:
- 126839
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMR3/EM.cpp
r75656 r75657 1775 1775 * VMCPU_FF_INTERRUPT_PIC here doesn't help as the caller already checks for 1776 1776 * it earlier as part of the high-priority pre-mask anyway. */ 1777 if (CPUMCanVmxNstGstTakePhysIntr(pVCpu, &pVCpu->cpum.GstCtx)) 1777 if ( VMCPU_FF_IS_ANY_SET(pVCpu, VMCPU_FF_INTERRUPT_APIC | VMCPU_FF_INTERRUPT_PIC) 1778 && CPUMCanVmxNstGstTakePhysIntr(pVCpu, &pVCpu->cpum.GstCtx)) 1778 1779 { 1779 1780 Assert(pVCpu->em.s.enmState != EMSTATE_WAIT_SIPI); 1780 if (VMCPU_FF_IS_ANY_SET(pVCpu, VMCPU_FF_INTERRUPT_APIC | VMCPU_FF_INTERRUPT_PIC)) 1781 { 1782 Assert(!VMCPU_FF_IS_SET(pVCpu, VMCPU_FF_INHIBIT_INTERRUPTS)); 1783 if (CPUMIsGuestVmxProcCtlsSet(pVCpu, &pVCpu->cpum.GstCtx, VMX_PROC_CTLS_INT_WINDOW_EXIT)) 1781 Assert(!VMCPU_FF_IS_SET(pVCpu, VMCPU_FF_INHIBIT_INTERRUPTS)); 1782 if (CPUMIsGuestVmxProcCtlsSet(pVCpu, &pVCpu->cpum.GstCtx, VMX_PROC_CTLS_INT_WINDOW_EXIT)) 1783 { 1784 CPUM_IMPORT_EXTRN_RET(pVCpu, IEM_CPUMCTX_EXTRN_VMX_VMEXIT_MASK); 1785 VBOXSTRICTRC rcStrict = IEMExecVmxVmexitIntWindow(pVCpu); 1786 if (RT_SUCCESS(rcStrict)) 1784 1787 { 1785 CPUM_IMPORT_EXTRN_RET(pVCpu, IEM_CPUMCTX_EXTRN_VMX_VMEXIT_MASK); 1786 VBOXSTRICTRC rcStrict = IEMExecVmxVmexitIntWindow(pVCpu); 1787 if (rcStrict != VINF_VMX_INTERCEPT_NOT_ACTIVE) 1788 { 1789 *pfWakeupPending = true; 1790 if (RT_SUCCESS(rcStrict)) 1791 { 1792 Assert(rcStrict != VINF_PGM_CHANGE_MODE); 1793 if (rcStrict == VINF_VMX_VMEXIT) 1794 return VINF_SUCCESS; 1795 return VBOXSTRICTRC_VAL(rcStrict); 1796 } 1797 AssertMsgFailed(("Interrupt-window Vm-exit failed! rc=%Rrc\n", VBOXSTRICTRC_VAL(rcStrict))); 1798 return VINF_EM_TRIPLE_FAULT; 1799 } 1788 *pfWakeupPending = true; 1789 Assert(rcStrict != VINF_PGM_CHANGE_MODE); 1790 if (rcStrict == VINF_VMX_VMEXIT) 1791 return VINF_SUCCESS; 1792 return VBOXSTRICTRC_VAL(rcStrict); 1800 1793 } 1801 1802 int rc = emR3GstInjectIntr(pVCpu, pfWakeupPending, pfInjected); 1803 if (rc == VINF_VMX_VMEXIT) 1804 rc = VINF_SUCCESS; 1805 return rc; 1806 } 1794 AssertMsgFailed(("Interrupt-window Vm-exit failed! rc=%Rrc\n", VBOXSTRICTRC_VAL(rcStrict))); 1795 return VINF_EM_TRIPLE_FAULT; 1796 } 1797 1798 int rc = emR3GstInjectIntr(pVCpu, pfWakeupPending, pfInjected); 1799 if (rc == VINF_VMX_VMEXIT) 1800 rc = VINF_SUCCESS; 1801 return rc; 1807 1802 } 1808 1803
Note:
See TracChangeset
for help on using the changeset viewer.