summaryrefslogtreecommitdiffstats
path: root/src/VBox/VMM/VMMAll
diff options
context:
space:
mode:
Diffstat (limited to 'src/VBox/VMM/VMMAll')
-rw-r--r--src/VBox/VMM/VMMAll/IEMAllCImplVmxInstr.cpp14
-rw-r--r--src/VBox/VMM/VMMAll/TMAll.cpp14
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)