diff options
Diffstat (limited to 'src/VBox/VMM/VMMAll')
-rw-r--r-- | src/VBox/VMM/VMMAll/IEMAllCImplVmxInstr.cpp | 14 | ||||
-rw-r--r-- | src/VBox/VMM/VMMAll/TMAll.cpp | 14 |
2 files changed, 19 insertions, 9 deletions
diff --git a/src/VBox/VMM/VMMAll/IEMAllCImplVmxInstr.cpp b/src/VBox/VMM/VMMAll/IEMAllCImplVmxInstr.cpp index 8ffcab9e..15e0aa6b 100644 --- a/src/VBox/VMM/VMMAll/IEMAllCImplVmxInstr.cpp +++ b/src/VBox/VMM/VMMAll/IEMAllCImplVmxInstr.cpp @@ -6670,17 +6670,19 @@ static int iemVmxVmentryCheckCtls(PVMCPUCC pVCpu, const char *pszInstr) RT_NOEXC IEM_VMX_VMENTRY_FAILED_RET(pVCpu, pszInstr, pszFailure, kVmxVDiag_Vmentry_EntryIntInfoErrCodePe); /* Exceptions that provide an error code. */ - if ( uType == VMX_ENTRY_INT_INFO_TYPE_HW_XCPT - && ( uVector == X86_XCPT_DF + if (uType == VMX_ENTRY_INT_INFO_TYPE_HW_XCPT) + { + if ( uVector == X86_XCPT_DF || uVector == X86_XCPT_TS || uVector == X86_XCPT_NP || uVector == X86_XCPT_SS || uVector == X86_XCPT_GP || uVector == X86_XCPT_PF - || uVector == X86_XCPT_AC)) - { /* likely */ } - else - IEM_VMX_VMENTRY_FAILED_RET(pVCpu, pszInstr, pszFailure, kVmxVDiag_Vmentry_EntryIntInfoErrCodeVec); + || uVector == X86_XCPT_AC) + { /* likely */ } + else + IEM_VMX_VMENTRY_FAILED_RET(pVCpu, pszInstr, pszFailure, kVmxVDiag_Vmentry_EntryIntInfoErrCodeVec); + } /* Exception error-code reserved bits. */ if (!(pVmcs->u32EntryXcptErrCode & ~VMX_ENTRY_INT_XCPT_ERR_CODE_VALID_MASK)) diff --git a/src/VBox/VMM/VMMAll/TMAll.cpp b/src/VBox/VMM/VMMAll/TMAll.cpp index 677decdd..db39fdaa 100644 --- a/src/VBox/VMM/VMMAll/TMAll.cpp +++ b/src/VBox/VMM/VMMAll/TMAll.cpp @@ -712,8 +712,9 @@ void tmTimerQueuesSanityChecks(PVMCC pVM, const char *pszWhere) # ifdef IN_RING3 /* Go thru all the timers and check that the active ones all are in the active lists. */ - uint32_t idxTimer = pQueue->cTimersAlloc; - uint32_t cFree = 0; + int const rcAllocLock = PDMCritSectRwTryEnterShared(pVM, &pQueue->AllocLock); + uint32_t idxTimer = pQueue->cTimersAlloc; + uint32_t cFree = 0; while (idxTimer-- > 0) { PTMTIMER const pTimer = &pQueue->paTimers[idxTimer]; @@ -778,7 +779,14 @@ void tmTimerQueuesSanityChecks(PVMCC pVM, const char *pszWhere) Assert(((pTimer->hSelf >> TMTIMERHANDLE_QUEUE_IDX_SHIFT) & TMTIMERHANDLE_QUEUE_IDX_SMASK) == idxQueue); } } - Assert(cFree == pQueue->cTimersFree); + if (RT_SUCCESS(rcAllocLock)) + { + Assert(cFree == pQueue->cTimersFree); + PDMCritSectRwLeaveShared(pVM, &pQueue->AllocLock); + } + else + Assert(cFree >= pQueue->cTimersFree); /* Can be lower as the tmr3TimerCreate may run concurrent. */ + # endif /* IN_RING3 */ if (pQueue->enmClock == TMCLOCK_VIRTUAL_SYNC) |