Changeset 72988 in vbox for trunk/src/VBox/VMM/VMMR0
- Timestamp:
- Jul 9, 2018 2:27:49 AM (7 years ago)
- svn:sync-xref-src-repo-rev:
- 123540
- Location:
- trunk/src/VBox/VMM/VMMR0
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMR0/HMSVMR0.cpp
r72983 r72988 3116 3116 static int hmR0SvmLeaveSession(PVMCPU pVCpu) 3117 3117 { 3118 HM_DISABLE_PREEMPT( );3118 HM_DISABLE_PREEMPT(pVCpu); 3119 3119 Assert(!VMMRZCallRing3IsEnabled(pVCpu)); 3120 3120 Assert(!RTThreadPreemptIsEnabled(NIL_RTTHREAD)); … … 3181 3181 VMMRZCallRing3RemoveNotification(pVCpu); 3182 3182 VMMRZCallRing3Disable(pVCpu); 3183 HM_DISABLE_PREEMPT( );3183 HM_DISABLE_PREEMPT(pVCpu); 3184 3184 3185 3185 /* Import the entire guest state. */ … … 6725 6725 /* We're playing with the host CPU state here, make sure we don't preempt or longjmp. */ 6726 6726 VMMRZCallRing3Disable(pVCpu); 6727 HM_DISABLE_PREEMPT( );6727 HM_DISABLE_PREEMPT(pVCpu); 6728 6728 6729 6729 /* Save the host & load the guest debug state, restart execution of the MOV DRx instruction. */ … … 6956 6956 /* We're playing with the host CPU state here, make sure we don't preempt or longjmp. */ 6957 6957 VMMRZCallRing3Disable(pVCpu); 6958 HM_DISABLE_PREEMPT( );6958 HM_DISABLE_PREEMPT(pVCpu); 6959 6959 6960 6960 STAM_COUNTER_INC(&pVCpu->hm.s.StatDRxIoCheck); -
trunk/src/VBox/VMM/VMMR0/HMVMXR0.cpp
r72987 r72988 144 144 145 145 /** Assert that preemption is disabled or covered by thread-context hooks. */ 146 #define HMVMX_ASSERT_PREEMPT_SAFE( ) Assert( VMMR0ThreadCtxHookIsEnabled(pVCpu) \146 #define HMVMX_ASSERT_PREEMPT_SAFE(a_pVCpu) Assert( VMMR0ThreadCtxHookIsEnabled((a_pVCpu)) \ 147 147 || !RTThreadPreemptIsEnabled(NIL_RTTHREAD)) 148 148 149 149 /** Assert that we haven't migrated CPUs when thread-context hooks are not 150 150 * used. */ 151 #define HMVMX_ASSERT_CPU_SAFE( ) AssertMsg( VMMR0ThreadCtxHookIsEnabled(pVCpu) \152 || pVCpu->hm.s.idEnteredCpu == RTMpCpuId(), \151 #define HMVMX_ASSERT_CPU_SAFE(a_pVCpu) AssertMsg( VMMR0ThreadCtxHookIsEnabled((a_pVCpu)) \ 152 || (a_pVCpu)->hm.s.idEnteredCpu == RTMpCpuId(), \ 153 153 ("Illegal migration! Entered on CPU %u Current %u\n", \ 154 pVCpu->hm.s.idEnteredCpu, RTMpCpuId()))154 (a_pVCpu)->hm.s.idEnteredCpu, RTMpCpuId())) 155 155 156 156 /** Asserts that the given CPUMCTX_EXTRN_XXX bits are present in the guest-CPU … … 4991 4991 Assert(pVCpu); 4992 4992 Assert(pVmxTransient); 4993 HMVMX_ASSERT_PREEMPT_SAFE( );4993 HMVMX_ASSERT_PREEMPT_SAFE(pVCpu); 4994 4994 4995 4995 Log4Func(("VM-entry failure: %Rrc\n", rcVMRun)); … … 6892 6892 static int hmR0VmxLeaveSession(PVMCPU pVCpu) 6893 6893 { 6894 HM_DISABLE_PREEMPT( );6895 HMVMX_ASSERT_CPU_SAFE( );6894 HM_DISABLE_PREEMPT(pVCpu); 6895 HMVMX_ASSERT_CPU_SAFE(pVCpu); 6896 6896 Assert(!VMMRZCallRing3IsEnabled(pVCpu)); 6897 6897 Assert(!RTThreadPreemptIsEnabled(NIL_RTTHREAD)); … … 6956 6956 { 6957 6957 Assert(pVCpu); 6958 HMVMX_ASSERT_PREEMPT_SAFE( );6958 HMVMX_ASSERT_PREEMPT_SAFE(pVCpu); 6959 6959 6960 6960 if (RT_UNLIKELY(rcExit == VERR_VMX_INVALID_VMCS_PTR)) … … 7085 7085 Assert(pvUser); 7086 7086 Assert(VMMRZCallRing3IsEnabled(pVCpu)); 7087 HMVMX_ASSERT_PREEMPT_SAFE( );7087 HMVMX_ASSERT_PREEMPT_SAFE(pVCpu); 7088 7088 7089 7089 VMMRZCallRing3Disable(pVCpu); … … 7296 7296 static VBOXSTRICTRC hmR0VmxInjectPendingEvent(PVMCPU pVCpu, uint32_t fIntrState, bool fStepping) 7297 7297 { 7298 HMVMX_ASSERT_PREEMPT_SAFE( );7298 HMVMX_ASSERT_PREEMPT_SAFE(pVCpu); 7299 7299 Assert(VMMRZCallRing3IsEnabled(pVCpu)); 7300 7300 … … 7982 7982 { 7983 7983 AssertPtr(pVCpu); 7984 HMVMX_ASSERT_PREEMPT_SAFE( );7984 HMVMX_ASSERT_PREEMPT_SAFE(pVCpu); 7985 7985 7986 7986 LogFlowFunc(("pVCpu=%p\n", pVCpu)); … … 8115 8115 static VBOXSTRICTRC hmR0VmxExportGuestStateOptimal(PVMCPU pVCpu) 8116 8116 { 8117 HMVMX_ASSERT_PREEMPT_SAFE( );8117 HMVMX_ASSERT_PREEMPT_SAFE(pVCpu); 8118 8118 Assert(!VMMRZCallRing3IsEnabled(pVCpu)); 8119 8119 Assert(VMMR0IsLogFlushDisabled(pVCpu)); … … 8653 8653 { 8654 8654 Assert(!HMR0SuspendPending()); 8655 HMVMX_ASSERT_CPU_SAFE( );8655 HMVMX_ASSERT_CPU_SAFE(pVCpu); 8656 8656 8657 8657 /* Preparatory work for running guest code, this may force us to return … … 9757 9757 { 9758 9758 Assert(!HMR0SuspendPending()); 9759 HMVMX_ASSERT_CPU_SAFE( );9759 HMVMX_ASSERT_CPU_SAFE(pVCpu); 9760 9760 bool fStepping = pVCpu->hm.s.fSingleInstruction; 9761 9761 … … 10022 10022 Assert(VMMRZCallRing3IsEnabled(pVCpu)); 10023 10023 Assert(!ASMAtomicUoReadU64(&pCtx->fExtrn)); 10024 HMVMX_ASSERT_PREEMPT_SAFE( );10024 HMVMX_ASSERT_PREEMPT_SAFE(pVCpu); 10025 10025 10026 10026 VMMRZCallRing3SetNotification(pVCpu, hmR0VmxCallRing3Callback, pCtx); … … 10153 10153 } while (0) 10154 10154 10155 # define HMVMX_VALIDATE_EXIT_HANDLER_PARAMS( ) \10155 # define HMVMX_VALIDATE_EXIT_HANDLER_PARAMS(a_pVCpu, a_pVmxTransient) \ 10156 10156 do { \ 10157 AssertPtr( pVCpu); \10158 AssertPtr( pVmxTransient); \10159 Assert( pVmxTransient->fVMEntryFailed == false); \10157 AssertPtr((a_pVCpu)); \ 10158 AssertPtr((a_pVmxTransient)); \ 10159 Assert((a_pVmxTransient)->fVMEntryFailed == false); \ 10160 10160 Assert(ASMIntAreEnabled()); \ 10161 HMVMX_ASSERT_PREEMPT_SAFE( ); \10161 HMVMX_ASSERT_PREEMPT_SAFE(a_pVCpu); \ 10162 10162 HMVMX_ASSERT_PREEMPT_CPUID_VAR(); \ 10163 Log4Func(("vcpu[%RU32] -v-v-v-v-v-v-v-v-v-v-v-v-v-v-v-v-v-v-v-v-v-v-v-v-v-v-v-v-v-v-v-v-v\n", pVCpu->idCpu)); \10164 HMVMX_ASSERT_PREEMPT_SAFE( ); \10165 if (VMMR0IsLogFlushDisabled( pVCpu)) \10163 Log4Func(("vcpu[%RU32] -v-v-v-v-v-v-v-v-v-v-v-v-v-v-v-v-v-v-v-v-v-v-v-v-v-v-v-v-v-v-v-v-v\n", (a_pVCpu)->idCpu)); \ 10164 HMVMX_ASSERT_PREEMPT_SAFE(a_pVCpu); \ 10165 if (VMMR0IsLogFlushDisabled((a_pVCpu))) \ 10166 10166 HMVMX_ASSERT_PREEMPT_CPUID(); \ 10167 10167 HMVMX_STOP_EXIT_DISPATCH_PROF(); \ 10168 10168 } while (0) 10169 10169 10170 # define HMVMX_VALIDATE_EXIT_XCPT_HANDLER_PARAMS( ) \10170 # define HMVMX_VALIDATE_EXIT_XCPT_HANDLER_PARAMS(a_pVCpu, a_pVmxTransient) \ 10171 10171 do { \ 10172 10172 Log4Func(("\n")); \ 10173 10173 } while (0) 10174 #else /* nonstrict builds: */10175 # define HMVMX_VALIDATE_EXIT_HANDLER_PARAMS( ) \10174 #else 10175 # define HMVMX_VALIDATE_EXIT_HANDLER_PARAMS(a_pVCpu, a_pVmxTransient) \ 10176 10176 do { \ 10177 10177 HMVMX_STOP_EXIT_DISPATCH_PROF(); \ 10178 RT_NOREF2( pVCpu, pVmxTransient); \10178 RT_NOREF2((a_pVCpu), (a_pVmxTransient)); \ 10179 10179 } while (0) 10180 # define HMVMX_VALIDATE_EXIT_XCPT_HANDLER_PARAMS( ) do { } while (0)10180 # define HMVMX_VALIDATE_EXIT_XCPT_HANDLER_PARAMS(a_pVCpu, a_pVmxTransient) do { } while (0) 10181 10181 #endif 10182 10182 … … 10850 10850 HMVMX_EXIT_DECL hmR0VmxExitExtInt(PVMCPU pVCpu, PVMXTRANSIENT pVmxTransient) 10851 10851 { 10852 HMVMX_VALIDATE_EXIT_HANDLER_PARAMS( );10852 HMVMX_VALIDATE_EXIT_HANDLER_PARAMS(pVCpu, pVmxTransient); 10853 10853 STAM_COUNTER_INC(&pVCpu->hm.s.StatExitExtInt); 10854 10854 /* Windows hosts (32-bit and 64-bit) have DPC latency issues. See @bugref{6853}. */ … … 10864 10864 HMVMX_EXIT_DECL hmR0VmxExitXcptOrNmi(PVMCPU pVCpu, PVMXTRANSIENT pVmxTransient) 10865 10865 { 10866 HMVMX_VALIDATE_EXIT_HANDLER_PARAMS( );10866 HMVMX_VALIDATE_EXIT_HANDLER_PARAMS(pVCpu, pVmxTransient); 10867 10867 STAM_PROFILE_ADV_START(&pVCpu->hm.s.StatExitXcptNmi, y3); 10868 10868 … … 10999 10999 HMVMX_EXIT_NSRC_DECL hmR0VmxExitIntWindow(PVMCPU pVCpu, PVMXTRANSIENT pVmxTransient) 11000 11000 { 11001 HMVMX_VALIDATE_EXIT_HANDLER_PARAMS( );11001 HMVMX_VALIDATE_EXIT_HANDLER_PARAMS(pVCpu, pVmxTransient); 11002 11002 11003 11003 /* Indicate that we no longer need to VM-exit when the guest is ready to receive interrupts, it is now ready. */ … … 11015 11015 HMVMX_EXIT_NSRC_DECL hmR0VmxExitNmiWindow(PVMCPU pVCpu, PVMXTRANSIENT pVmxTransient) 11016 11016 { 11017 HMVMX_VALIDATE_EXIT_HANDLER_PARAMS( );11017 HMVMX_VALIDATE_EXIT_HANDLER_PARAMS(pVCpu, pVmxTransient); 11018 11018 if (RT_UNLIKELY(!(pVCpu->hm.s.vmx.u32ProcCtls & VMX_VMCS_CTRL_PROC_EXEC_NMI_WINDOW_EXIT))) 11019 11019 { … … 11052 11052 HMVMX_EXIT_NSRC_DECL hmR0VmxExitWbinvd(PVMCPU pVCpu, PVMXTRANSIENT pVmxTransient) 11053 11053 { 11054 HMVMX_VALIDATE_EXIT_HANDLER_PARAMS( );11054 HMVMX_VALIDATE_EXIT_HANDLER_PARAMS(pVCpu, pVmxTransient); 11055 11055 return hmR0VmxAdvanceGuestRip(pVCpu, pVmxTransient); 11056 11056 } … … 11062 11062 HMVMX_EXIT_NSRC_DECL hmR0VmxExitInvd(PVMCPU pVCpu, PVMXTRANSIENT pVmxTransient) 11063 11063 { 11064 HMVMX_VALIDATE_EXIT_HANDLER_PARAMS( );11064 HMVMX_VALIDATE_EXIT_HANDLER_PARAMS(pVCpu, pVmxTransient); 11065 11065 return hmR0VmxAdvanceGuestRip(pVCpu, pVmxTransient); 11066 11066 } … … 11072 11072 HMVMX_EXIT_DECL hmR0VmxExitCpuid(PVMCPU pVCpu, PVMXTRANSIENT pVmxTransient) 11073 11073 { 11074 HMVMX_VALIDATE_EXIT_HANDLER_PARAMS( );11074 HMVMX_VALIDATE_EXIT_HANDLER_PARAMS(pVCpu, pVmxTransient); 11075 11075 11076 11076 /* … … 11127 11127 HMVMX_EXIT_DECL hmR0VmxExitGetsec(PVMCPU pVCpu, PVMXTRANSIENT pVmxTransient) 11128 11128 { 11129 HMVMX_VALIDATE_EXIT_HANDLER_PARAMS( );11129 HMVMX_VALIDATE_EXIT_HANDLER_PARAMS(pVCpu, pVmxTransient); 11130 11130 int rc = hmR0VmxImportGuestState(pVCpu, CPUMCTX_EXTRN_CR4); 11131 11131 AssertRCReturn(rc, rc); … … 11144 11144 HMVMX_EXIT_DECL hmR0VmxExitRdtsc(PVMCPU pVCpu, PVMXTRANSIENT pVmxTransient) 11145 11145 { 11146 HMVMX_VALIDATE_EXIT_HANDLER_PARAMS( );11146 HMVMX_VALIDATE_EXIT_HANDLER_PARAMS(pVCpu, pVmxTransient); 11147 11147 int rc = hmR0VmxImportGuestState(pVCpu, IEM_CPUMCTX_EXTRN_MUST_MASK); 11148 11148 rc |= hmR0VmxReadExitInstrLenVmcs(pVmxTransient); … … 11173 11173 HMVMX_EXIT_DECL hmR0VmxExitRdtscp(PVMCPU pVCpu, PVMXTRANSIENT pVmxTransient) 11174 11174 { 11175 HMVMX_VALIDATE_EXIT_HANDLER_PARAMS( );11175 HMVMX_VALIDATE_EXIT_HANDLER_PARAMS(pVCpu, pVmxTransient); 11176 11176 int rc = hmR0VmxImportGuestState(pVCpu, IEM_CPUMCTX_EXTRN_MUST_MASK | CPUMCTX_EXTRN_TSC_AUX); 11177 11177 rc |= hmR0VmxReadExitInstrLenVmcs(pVmxTransient); … … 11202 11202 HMVMX_EXIT_DECL hmR0VmxExitRdpmc(PVMCPU pVCpu, PVMXTRANSIENT pVmxTransient) 11203 11203 { 11204 HMVMX_VALIDATE_EXIT_HANDLER_PARAMS( );11204 HMVMX_VALIDATE_EXIT_HANDLER_PARAMS(pVCpu, pVmxTransient); 11205 11205 int rc = hmR0VmxImportGuestState(pVCpu, CPUMCTX_EXTRN_CR4 | CPUMCTX_EXTRN_CR0 | CPUMCTX_EXTRN_RFLAGS | CPUMCTX_EXTRN_SS); 11206 11206 AssertRCReturn(rc, rc); … … 11228 11228 HMVMX_EXIT_DECL hmR0VmxExitVmcall(PVMCPU pVCpu, PVMXTRANSIENT pVmxTransient) 11229 11229 { 11230 HMVMX_VALIDATE_EXIT_HANDLER_PARAMS( );11230 HMVMX_VALIDATE_EXIT_HANDLER_PARAMS(pVCpu, pVmxTransient); 11231 11231 11232 11232 VBOXSTRICTRC rcStrict = VERR_VMX_IPE_3; … … 11271 11271 HMVMX_EXIT_DECL hmR0VmxExitInvlpg(PVMCPU pVCpu, PVMXTRANSIENT pVmxTransient) 11272 11272 { 11273 HMVMX_VALIDATE_EXIT_HANDLER_PARAMS( );11273 HMVMX_VALIDATE_EXIT_HANDLER_PARAMS(pVCpu, pVmxTransient); 11274 11274 Assert(!pVCpu->CTX_SUFF(pVM)->hm.s.fNestedPaging || pVCpu->hm.s.fUsingDebugLoop); 11275 11275 … … 11300 11300 HMVMX_EXIT_DECL hmR0VmxExitMonitor(PVMCPU pVCpu, PVMXTRANSIENT pVmxTransient) 11301 11301 { 11302 HMVMX_VALIDATE_EXIT_HANDLER_PARAMS( );11302 HMVMX_VALIDATE_EXIT_HANDLER_PARAMS(pVCpu, pVmxTransient); 11303 11303 int rc = hmR0VmxImportGuestState(pVCpu, CPUMCTX_EXTRN_CR0 | CPUMCTX_EXTRN_RFLAGS | CPUMCTX_EXTRN_SS); 11304 11304 AssertRCReturn(rc, rc); … … 11324 11324 HMVMX_EXIT_DECL hmR0VmxExitMwait(PVMCPU pVCpu, PVMXTRANSIENT pVmxTransient) 11325 11325 { 11326 HMVMX_VALIDATE_EXIT_HANDLER_PARAMS( );11326 HMVMX_VALIDATE_EXIT_HANDLER_PARAMS(pVCpu, pVmxTransient); 11327 11327 int rc = hmR0VmxImportGuestState(pVCpu, CPUMCTX_EXTRN_CR0 | CPUMCTX_EXTRN_RFLAGS | CPUMCTX_EXTRN_SS); 11328 11328 AssertRCReturn(rc, rc); … … 11367 11367 * See Intel spec. 33.15.5 "Enabling the Dual-Monitor Treatment". 11368 11368 */ 11369 HMVMX_VALIDATE_EXIT_HANDLER_PARAMS( );11369 HMVMX_VALIDATE_EXIT_HANDLER_PARAMS(pVCpu, pVmxTransient); 11370 11370 AssertMsgFailed(("Unexpected RSM VM-exit\n")); 11371 11371 HMVMX_UNEXPECTED_EXIT_RET(pVCpu, pVmxTransient); … … 11387 11387 * See Intel spec. 25.3 "Other Causes of VM-Exits" 11388 11388 */ 11389 HMVMX_VALIDATE_EXIT_HANDLER_PARAMS( );11389 HMVMX_VALIDATE_EXIT_HANDLER_PARAMS(pVCpu, pVmxTransient); 11390 11390 AssertMsgFailed(("Unexpected SMI VM-exit\n")); 11391 11391 HMVMX_UNEXPECTED_EXIT_RET(pVCpu, pVmxTransient); … … 11399 11399 { 11400 11400 /* Same treatment as VMX_EXIT_SMI. See comment in hmR0VmxExitSmi(). */ 11401 HMVMX_VALIDATE_EXIT_HANDLER_PARAMS( );11401 HMVMX_VALIDATE_EXIT_HANDLER_PARAMS(pVCpu, pVmxTransient); 11402 11402 AssertMsgFailed(("Unexpected IO SMI VM-exit\n")); 11403 11403 HMVMX_UNEXPECTED_EXIT_RET(pVCpu, pVmxTransient); … … 11415 11415 * See Intel spec. 25.3 "Other Causes of VM-exits". 11416 11416 */ 11417 HMVMX_VALIDATE_EXIT_HANDLER_PARAMS( );11417 HMVMX_VALIDATE_EXIT_HANDLER_PARAMS(pVCpu, pVmxTransient); 11418 11418 AssertMsgFailed(("Unexpected SIPI VM-exit\n")); 11419 11419 HMVMX_UNEXPECTED_EXIT_RET(pVCpu, pVmxTransient); … … 11434 11434 * See Intel spec. "23.8 Restrictions on VMX operation". 11435 11435 */ 11436 HMVMX_VALIDATE_EXIT_HANDLER_PARAMS( );11436 HMVMX_VALIDATE_EXIT_HANDLER_PARAMS(pVCpu, pVmxTransient); 11437 11437 return VINF_SUCCESS; 11438 11438 } … … 11445 11445 HMVMX_EXIT_DECL hmR0VmxExitTripleFault(PVMCPU pVCpu, PVMXTRANSIENT pVmxTransient) 11446 11446 { 11447 HMVMX_VALIDATE_EXIT_HANDLER_PARAMS( );11447 HMVMX_VALIDATE_EXIT_HANDLER_PARAMS(pVCpu, pVmxTransient); 11448 11448 return VINF_EM_RESET; 11449 11449 } … … 11455 11455 HMVMX_EXIT_DECL hmR0VmxExitHlt(PVMCPU pVCpu, PVMXTRANSIENT pVmxTransient) 11456 11456 { 11457 HMVMX_VALIDATE_EXIT_HANDLER_PARAMS( );11457 HMVMX_VALIDATE_EXIT_HANDLER_PARAMS(pVCpu, pVmxTransient); 11458 11458 Assert(pVCpu->hm.s.vmx.u32ProcCtls & VMX_VMCS_CTRL_PROC_EXEC_HLT_EXIT); 11459 11459 … … 11480 11480 HMVMX_EXIT_NSRC_DECL hmR0VmxExitSetPendingXcptUD(PVMCPU pVCpu, PVMXTRANSIENT pVmxTransient) 11481 11481 { 11482 HMVMX_VALIDATE_EXIT_HANDLER_PARAMS( );11482 HMVMX_VALIDATE_EXIT_HANDLER_PARAMS(pVCpu, pVmxTransient); 11483 11483 hmR0VmxSetPendingXcptUD(pVCpu); 11484 11484 return VINF_SUCCESS; … … 11491 11491 HMVMX_EXIT_DECL hmR0VmxExitPreemptTimer(PVMCPU pVCpu, PVMXTRANSIENT pVmxTransient) 11492 11492 { 11493 HMVMX_VALIDATE_EXIT_HANDLER_PARAMS( );11493 HMVMX_VALIDATE_EXIT_HANDLER_PARAMS(pVCpu, pVmxTransient); 11494 11494 11495 11495 /* If the preemption-timer has expired, reinitialize the preemption timer on next VM-entry. */ … … 11509 11509 HMVMX_EXIT_DECL hmR0VmxExitXsetbv(PVMCPU pVCpu, PVMXTRANSIENT pVmxTransient) 11510 11510 { 11511 HMVMX_VALIDATE_EXIT_HANDLER_PARAMS( );11511 HMVMX_VALIDATE_EXIT_HANDLER_PARAMS(pVCpu, pVmxTransient); 11512 11512 11513 11513 int rc = hmR0VmxReadExitInstrLenVmcs(pVmxTransient); … … 11531 11531 HMVMX_EXIT_DECL hmR0VmxExitInvpcid(PVMCPU pVCpu, PVMXTRANSIENT pVmxTransient) 11532 11532 { 11533 HMVMX_VALIDATE_EXIT_HANDLER_PARAMS( );11533 HMVMX_VALIDATE_EXIT_HANDLER_PARAMS(pVCpu, pVmxTransient); 11534 11534 /** @todo Use VM-exit instruction information. */ 11535 11535 return VERR_EM_INTERPRETER; … … 11633 11633 HMVMX_EXIT_DECL hmR0VmxExitXdtrAccess(PVMCPU pVCpu, PVMXTRANSIENT pVmxTransient) 11634 11634 { 11635 HMVMX_VALIDATE_EXIT_HANDLER_PARAMS( );11635 HMVMX_VALIDATE_EXIT_HANDLER_PARAMS(pVCpu, pVmxTransient); 11636 11636 11637 11637 /* By default, we don't enable VMX_VMCS_CTRL_PROC_EXEC2_DESCRIPTOR_TABLE_EXIT. */ … … 11649 11649 HMVMX_EXIT_DECL hmR0VmxExitRdrand(PVMCPU pVCpu, PVMXTRANSIENT pVmxTransient) 11650 11650 { 11651 HMVMX_VALIDATE_EXIT_HANDLER_PARAMS( );11651 HMVMX_VALIDATE_EXIT_HANDLER_PARAMS(pVCpu, pVmxTransient); 11652 11652 11653 11653 /* By default, we don't enable VMX_VMCS_CTRL_PROC_EXEC2_RDRAND_EXIT. */ … … 11664 11664 HMVMX_EXIT_DECL hmR0VmxExitRdmsr(PVMCPU pVCpu, PVMXTRANSIENT pVmxTransient) 11665 11665 { 11666 HMVMX_VALIDATE_EXIT_HANDLER_PARAMS( );11666 HMVMX_VALIDATE_EXIT_HANDLER_PARAMS(pVCpu, pVmxTransient); 11667 11667 11668 11668 /** @todo Optimize this: We currently drag in in the whole MSR state … … 11723 11723 HMVMX_EXIT_DECL hmR0VmxExitWrmsr(PVMCPU pVCpu, PVMXTRANSIENT pVmxTransient) 11724 11724 { 11725 HMVMX_VALIDATE_EXIT_HANDLER_PARAMS( );11725 HMVMX_VALIDATE_EXIT_HANDLER_PARAMS(pVCpu, pVmxTransient); 11726 11726 11727 11727 /** @todo Optimize this: We currently drag in in the whole MSR state … … 11853 11853 HMVMX_EXIT_DECL hmR0VmxExitPause(PVMCPU pVCpu, PVMXTRANSIENT pVmxTransient) 11854 11854 { 11855 HMVMX_VALIDATE_EXIT_HANDLER_PARAMS( );11855 HMVMX_VALIDATE_EXIT_HANDLER_PARAMS(pVCpu, pVmxTransient); 11856 11856 /** @todo The guest has likely hit a contended spinlock. We might want to 11857 11857 * poke a schedule different guest VCPU. */ … … 11866 11866 HMVMX_EXIT_NSRC_DECL hmR0VmxExitTprBelowThreshold(PVMCPU pVCpu, PVMXTRANSIENT pVmxTransient) 11867 11867 { 11868 HMVMX_VALIDATE_EXIT_HANDLER_PARAMS( );11868 HMVMX_VALIDATE_EXIT_HANDLER_PARAMS(pVCpu, pVmxTransient); 11869 11869 Assert(pVCpu->hm.s.vmx.u32ProcCtls & VMX_VMCS_CTRL_PROC_EXEC_USE_TPR_SHADOW); 11870 11870 … … 11890 11890 HMVMX_EXIT_DECL hmR0VmxExitMovCRx(PVMCPU pVCpu, PVMXTRANSIENT pVmxTransient) 11891 11891 { 11892 HMVMX_VALIDATE_EXIT_HANDLER_PARAMS( );11892 HMVMX_VALIDATE_EXIT_HANDLER_PARAMS(pVCpu, pVmxTransient); 11893 11893 STAM_PROFILE_ADV_START(&pVCpu->hm.s.StatExitMovCRx, y2); 11894 11894 … … 11899 11899 11900 11900 VBOXSTRICTRC rcStrict; 11901 PVM 11901 PVM pVM = pVCpu->CTX_SUFF(pVM); 11902 11902 RTGCUINTPTR const uExitQualification = pVmxTransient->uExitQualification; 11903 11903 uint32_t const uAccessType = VMX_EXIT_QUAL_CRX_ACCESS(uExitQualification); … … 12055 12055 HMVMX_EXIT_DECL hmR0VmxExitIoInstr(PVMCPU pVCpu, PVMXTRANSIENT pVmxTransient) 12056 12056 { 12057 HMVMX_VALIDATE_EXIT_HANDLER_PARAMS( );12057 HMVMX_VALIDATE_EXIT_HANDLER_PARAMS(pVCpu, pVmxTransient); 12058 12058 STAM_PROFILE_ADV_START(&pVCpu->hm.s.StatExitIO, y1); 12059 12059 … … 12214 12214 /* We're playing with the host CPU state here, make sure we don't preempt or longjmp. */ 12215 12215 VMMRZCallRing3Disable(pVCpu); 12216 HM_DISABLE_PREEMPT( );12216 HM_DISABLE_PREEMPT(pVCpu); 12217 12217 12218 12218 bool fIsGuestDbgActive = CPUMR0DebugStateMaybeSaveGuest(pVCpu, true /* fDr6 */); … … 12294 12294 HMVMX_EXIT_DECL hmR0VmxExitTaskSwitch(PVMCPU pVCpu, PVMXTRANSIENT pVmxTransient) 12295 12295 { 12296 HMVMX_VALIDATE_EXIT_HANDLER_PARAMS( );12296 HMVMX_VALIDATE_EXIT_HANDLER_PARAMS(pVCpu, pVmxTransient); 12297 12297 12298 12298 /* Check if this task-switch occurred while delivery an event through the guest IDT. */ … … 12345 12345 HMVMX_EXIT_DECL hmR0VmxExitMtf(PVMCPU pVCpu, PVMXTRANSIENT pVmxTransient) 12346 12346 { 12347 HMVMX_VALIDATE_EXIT_HANDLER_PARAMS( );12347 HMVMX_VALIDATE_EXIT_HANDLER_PARAMS(pVCpu, pVmxTransient); 12348 12348 Assert(pVCpu->hm.s.vmx.u32ProcCtls & VMX_VMCS_CTRL_PROC_EXEC_MONITOR_TRAP_FLAG); 12349 12349 pVCpu->hm.s.vmx.u32ProcCtls &= ~VMX_VMCS_CTRL_PROC_EXEC_MONITOR_TRAP_FLAG; … … 12360 12360 HMVMX_EXIT_DECL hmR0VmxExitApicAccess(PVMCPU pVCpu, PVMXTRANSIENT pVmxTransient) 12361 12361 { 12362 HMVMX_VALIDATE_EXIT_HANDLER_PARAMS( );12362 HMVMX_VALIDATE_EXIT_HANDLER_PARAMS(pVCpu, pVmxTransient); 12363 12363 12364 12364 STAM_COUNTER_INC(&pVCpu->hm.s.StatExitApicAccess); … … 12440 12440 HMVMX_EXIT_DECL hmR0VmxExitMovDRx(PVMCPU pVCpu, PVMXTRANSIENT pVmxTransient) 12441 12441 { 12442 HMVMX_VALIDATE_EXIT_HANDLER_PARAMS( );12442 HMVMX_VALIDATE_EXIT_HANDLER_PARAMS(pVCpu, pVmxTransient); 12443 12443 12444 12444 /* We should -not- get this VM-exit if the guest's debug registers were active. */ … … 12462 12462 /* We're playing with the host CPU state here, make sure we can't preempt or longjmp. */ 12463 12463 VMMRZCallRing3Disable(pVCpu); 12464 HM_DISABLE_PREEMPT( );12464 HM_DISABLE_PREEMPT(pVCpu); 12465 12465 12466 12466 /* Save the host & load the guest debug state, restart execution of the MOV DRx instruction. */ … … 12528 12528 HMVMX_EXIT_DECL hmR0VmxExitEptMisconfig(PVMCPU pVCpu, PVMXTRANSIENT pVmxTransient) 12529 12529 { 12530 HMVMX_VALIDATE_EXIT_HANDLER_PARAMS( );12530 HMVMX_VALIDATE_EXIT_HANDLER_PARAMS(pVCpu, pVmxTransient); 12531 12531 Assert(pVCpu->CTX_SUFF(pVM)->hm.s.fNestedPaging); 12532 12532 … … 12613 12613 HMVMX_EXIT_DECL hmR0VmxExitEptViolation(PVMCPU pVCpu, PVMXTRANSIENT pVmxTransient) 12614 12614 { 12615 HMVMX_VALIDATE_EXIT_HANDLER_PARAMS( );12615 HMVMX_VALIDATE_EXIT_HANDLER_PARAMS(pVCpu, pVmxTransient); 12616 12616 Assert(pVCpu->CTX_SUFF(pVM)->hm.s.fNestedPaging); 12617 12617 … … 12691 12691 static int hmR0VmxExitXcptMF(PVMCPU pVCpu, PVMXTRANSIENT pVmxTransient) 12692 12692 { 12693 HMVMX_VALIDATE_EXIT_XCPT_HANDLER_PARAMS( );12693 HMVMX_VALIDATE_EXIT_XCPT_HANDLER_PARAMS(pVCpu, pVmxTransient); 12694 12694 STAM_COUNTER_INC(&pVCpu->hm.s.StatExitGuestMF); 12695 12695 … … 12721 12721 static int hmR0VmxExitXcptBP(PVMCPU pVCpu, PVMXTRANSIENT pVmxTransient) 12722 12722 { 12723 HMVMX_VALIDATE_EXIT_XCPT_HANDLER_PARAMS( );12723 HMVMX_VALIDATE_EXIT_XCPT_HANDLER_PARAMS(pVCpu, pVmxTransient); 12724 12724 STAM_COUNTER_INC(&pVCpu->hm.s.StatExitGuestBP); 12725 12725 … … 12750 12750 static int hmR0VmxExitXcptAC(PVMCPU pVCpu, PVMXTRANSIENT pVmxTransient) 12751 12751 { 12752 HMVMX_VALIDATE_EXIT_XCPT_HANDLER_PARAMS( );12752 HMVMX_VALIDATE_EXIT_XCPT_HANDLER_PARAMS(pVCpu, pVmxTransient); 12753 12753 12754 12754 /* … … 12771 12771 static int hmR0VmxExitXcptDB(PVMCPU pVCpu, PVMXTRANSIENT pVmxTransient) 12772 12772 { 12773 HMVMX_VALIDATE_EXIT_XCPT_HANDLER_PARAMS( );12773 HMVMX_VALIDATE_EXIT_XCPT_HANDLER_PARAMS(pVCpu, pVmxTransient); 12774 12774 STAM_COUNTER_INC(&pVCpu->hm.s.StatExitGuestDB); 12775 12775 … … 12796 12796 */ 12797 12797 VMMRZCallRing3Disable(pVCpu); 12798 HM_DISABLE_PREEMPT( );12798 HM_DISABLE_PREEMPT(pVCpu); 12799 12799 12800 12800 pCtx->dr[6] &= ~X86_DR6_B_MASK; … … 12857 12857 static int hmR0VmxExitXcptGP(PVMCPU pVCpu, PVMXTRANSIENT pVmxTransient) 12858 12858 { 12859 HMVMX_VALIDATE_EXIT_XCPT_HANDLER_PARAMS( );12859 HMVMX_VALIDATE_EXIT_XCPT_HANDLER_PARAMS(pVCpu, pVmxTransient); 12860 12860 STAM_COUNTER_INC(&pVCpu->hm.s.StatExitGuestGP); 12861 12861 … … 13159 13159 static int hmR0VmxExitXcptGeneric(PVMCPU pVCpu, PVMXTRANSIENT pVmxTransient) 13160 13160 { 13161 HMVMX_VALIDATE_EXIT_XCPT_HANDLER_PARAMS( );13161 HMVMX_VALIDATE_EXIT_XCPT_HANDLER_PARAMS(pVCpu, pVmxTransient); 13162 13162 #ifndef HMVMX_ALWAYS_TRAP_ALL_XCPTS 13163 13163 AssertMsg(pVCpu->hm.s.fUsingDebugLoop || pVCpu->hm.s.vmx.RealMode.fRealOnV86Active, … … 13190 13190 static int hmR0VmxExitXcptPF(PVMCPU pVCpu, PVMXTRANSIENT pVmxTransient) 13191 13191 { 13192 HMVMX_VALIDATE_EXIT_XCPT_HANDLER_PARAMS( );13192 HMVMX_VALIDATE_EXIT_XCPT_HANDLER_PARAMS(pVCpu, pVmxTransient); 13193 13193 PVM pVM = pVCpu->CTX_SUFF(pVM); 13194 13194 int rc = hmR0VmxReadExitQualificationVmcs(pVCpu, pVmxTransient);
Note:
See TracChangeset
for help on using the changeset viewer.