- Timestamp:
- Oct 16, 2018 4:40:12 AM (6 years ago)
- Location:
- trunk
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/include/VBox/vmm/iem.h
r74834 r74861 222 222 223 223 #ifdef VBOX_WITH_NESTED_HWVIRT_SVM 224 # define IEM_CPUMCTX_EXTRN_VMX_VMEXIT_MASK CPUMCTX_EXTRN_ABSOLUTELY_ALL 225 # define IEM_CPUMCTX_EXTRN_VMX_VMENTRY_MASK IEM_CPUMCTX_EXTRN_VMX_VMEXIT_MASK 226 #endif 227 228 #ifdef VBOX_WITH_NESTED_HWVIRT_SVM 224 229 /** The CPUMCTX_EXTRN_XXX mask needed when calling IEMExecSvmVmexit(). 225 230 * IEM will ASSUME the caller has ensured these are already present. */ … … 324 329 #ifdef VBOX_WITH_NESTED_HWVIRT_VMX 325 330 VMM_INT_DECL(VBOXSTRICTRC) IEMExecVmxVmexitExtInt(PVMCPU pVCpu, uint8_t uVector, bool fIntPending); 331 VMM_INT_DECL(VBOXSTRICTRC) IEMExecVmxVmexitIntWindow(PVMCPU pVCpu); 326 332 VMM_INT_DECL(VBOXSTRICTRC) IEMExecDecodedVmread(PVMCPU pVCpu, PCVMXVEXITINFO pExitInfo); 327 333 VMM_INT_DECL(VBOXSTRICTRC) IEMExecDecodedVmwrite(PVMCPU pVCpu, PCVMXVEXITINFO pExitInfo); -
trunk/src/VBox/VMM/VMMAll/IEMAll.cpp
r74834 r74861 979 979 IEM_STATIC VBOXSTRICTRC iemVmxVmexitTripleFault(PVMCPU pVCpu); 980 980 IEM_STATIC VBOXSTRICTRC iemVmxVmexitExtInt(PVMCPU pVCpu, uint8_t uVector, bool fIntPending); 981 IEM_STATIC VBOXSTRICTRC iemVmxVmexitIntWindow(PVMCPU pVCpu); 981 982 #endif 982 983 … … 15650 15651 VMM_INT_DECL(VBOXSTRICTRC) IEMExecVmxVmexitExtInt(PVMCPU pVCpu, uint8_t uVector, bool fIntPending) 15651 15652 { 15652 /* IEM_CTX_ASSERT(pVCpu, IEM_CPUMCTX_EXTRN_SVM_VMEXIT_MASK); */ /** @todo NSTVMX: VMX_EXIT_MASK */15653 IEM_CTX_ASSERT(pVCpu, IEM_CPUMCTX_EXTRN_VMX_VMEXIT_MASK); 15653 15654 VBOXSTRICTRC rcStrict = iemVmxVmexitExtInt(pVCpu, uVector, fIntPending); 15654 15655 if (pVCpu->iem.s.cActiveMappings) … … 15659 15660 15660 15661 /** 15662 * Interface for HM and EM to emulate VM-exits for interrupt-windows. 15663 * 15664 * @returns Strict VBox status code. 15665 * @param pVCpu The cross context virtual CPU structure of the calling EMT. 15666 * @param uExitReason The VM-exit reason. 15667 * @param uExitQual The VM-exit qualification. 15668 * 15669 * @thread EMT(pVCpu) 15670 */ 15671 VMM_INT_DECL(VBOXSTRICTRC) IEMExecVmxVmexitIntWindow(PVMCPU pVCpu) 15672 { 15673 IEM_CTX_ASSERT(pVCpu, IEM_CPUMCTX_EXTRN_VMX_VMEXIT_MASK); 15674 VBOXSTRICTRC rcStrict = iemVmxVmexitIntWindow(pVCpu); 15675 if (pVCpu->iem.s.cActiveMappings) 15676 iemMemRollback(pVCpu); 15677 return iemExecStatusCodeFiddling(pVCpu, rcStrict); 15678 } 15679 15680 15681 /** 15661 15682 * Interface for HM and EM to emulate the VMREAD instruction. 15662 15683 * … … 15669 15690 { 15670 15691 IEMEXEC_ASSERT_INSTR_LEN_RETURN(pExitInfo->cbInstr, 3); 15671 IEM_CTX_ASSERT(pVCpu, CPUMCTX_EXTRN_HWVIRT);15692 IEM_CTX_ASSERT(pVCpu, IEM_CPUMCTX_EXTRN_EXEC_DECODED_MEM_MASK | CPUMCTX_EXTRN_HM_VMX_MASK); 15672 15693 Assert(pExitInfo); 15673 15694 … … 15714 15735 { 15715 15736 IEMEXEC_ASSERT_INSTR_LEN_RETURN(pExitInfo->cbInstr, 3); 15716 IEM_CTX_ASSERT(pVCpu, CPUMCTX_EXTRN_HWVIRT);15737 IEM_CTX_ASSERT(pVCpu, IEM_CPUMCTX_EXTRN_EXEC_DECODED_MEM_MASK | CPUMCTX_EXTRN_HM_VMX_MASK); 15717 15738 Assert(pExitInfo); 15718 15739 … … 15755 15776 Assert(pExitInfo); 15756 15777 IEMEXEC_ASSERT_INSTR_LEN_RETURN(pExitInfo->cbInstr, 3); 15757 IEM_CTX_ASSERT(pVCpu, CPUMCTX_EXTRN_HWVIRT);15778 IEM_CTX_ASSERT(pVCpu, IEM_CPUMCTX_EXTRN_EXEC_DECODED_MEM_MASK | CPUMCTX_EXTRN_HM_VMX_MASK); 15758 15779 15759 15780 iemInitExec(pVCpu, false /*fBypassHandlers*/); … … 15781 15802 Assert(pExitInfo); 15782 15803 IEMEXEC_ASSERT_INSTR_LEN_RETURN(pExitInfo->cbInstr, 3); 15783 IEM_CTX_ASSERT(pVCpu, CPUMCTX_EXTRN_HWVIRT);15804 IEM_CTX_ASSERT(pVCpu, IEM_CPUMCTX_EXTRN_EXEC_DECODED_MEM_MASK | CPUMCTX_EXTRN_HM_VMX_MASK); 15784 15805 15785 15806 iemInitExec(pVCpu, false /*fBypassHandlers*/); … … 15807 15828 Assert(pExitInfo); 15808 15829 IEMEXEC_ASSERT_INSTR_LEN_RETURN(pExitInfo->cbInstr, 3); 15809 IEM_CTX_ASSERT(pVCpu, CPUMCTX_EXTRN_HWVIRT);15830 IEM_CTX_ASSERT(pVCpu, IEM_CPUMCTX_EXTRN_EXEC_DECODED_MEM_MASK | CPUMCTX_EXTRN_HM_VMX_MASK); 15810 15831 15811 15832 iemInitExec(pVCpu, false /*fBypassHandlers*/); … … 15833 15854 Assert(pExitInfo); 15834 15855 IEMEXEC_ASSERT_INSTR_LEN_RETURN(pExitInfo->cbInstr, 3); 15835 IEM_CTX_ASSERT(pVCpu, CPUMCTX_EXTRN_HWVIRT);15856 IEM_CTX_ASSERT(pVCpu, IEM_CPUMCTX_EXTRN_EXEC_DECODED_MEM_MASK | CPUMCTX_EXTRN_HM_VMX_MASK); 15836 15857 15837 15858 iemInitExec(pVCpu, false /*fBypassHandlers*/); … … 15858 15879 { 15859 15880 IEMEXEC_ASSERT_INSTR_LEN_RETURN(cbInstr, 3); 15881 IEM_CTX_ASSERT(pVCpu, CPUMCTX_EXTRN_HM_VMX_MASK); 15860 15882 15861 15883 iemInitExec(pVCpu, false /*fBypassHandlers*/); -
trunk/src/VBox/VMM/VMMAll/IEMAllCImplVmxInstr.cpp.h
r74836 r74861 3734 3734 3735 3735 /** 3736 * VMX VM-exit handler for interrupt-window VM-exits. 3737 * 3738 * @returns VBox strict status code. 3739 * @param pVCpu The cross context virtual CPU structure. 3740 */ 3741 IEM_STATIC VBOXSTRICTRC iemVmxVmexitIntWindow(PVMCPU pVCpu) 3742 { 3743 iemVmxVmcsSetExitQual(pVCpu, 0); 3744 return iemVmxVmexit(pVCpu, VMX_EXIT_INT_WINDOW); 3745 } 3746 3747 3748 /** 3736 3749 * VMX VM-exit handler for VM-exits due to delivery of an event. 3737 3750 *
Note:
See TracChangeset
for help on using the changeset viewer.