From d9533c342dd90bb3404ecfba87ad3703e038bb6d Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Mon, 5 Aug 2024 11:23:06 +0200 Subject: Merging upstream version 7.0.20-dfsg. Signed-off-by: Daniel Baumann --- src/VBox/VMM/VMMAll/IEMAllCImplVmxInstr.cpp | 14 ++++++++------ src/VBox/VMM/VMMAll/TMAll.cpp | 14 +++++++++++--- src/VBox/VMM/VMMR3/PDM.cpp | 8 +++++++- 3 files changed, 26 insertions(+), 10 deletions(-) (limited to 'src/VBox/VMM') 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) diff --git a/src/VBox/VMM/VMMR3/PDM.cpp b/src/VBox/VMM/VMMR3/PDM.cpp index 1e56b66f..3d3ff8d4 100644 --- a/src/VBox/VMM/VMMR3/PDM.cpp +++ b/src/VBox/VMM/VMMR3/PDM.cpp @@ -1246,7 +1246,13 @@ static DECLCALLBACK(int) pdmR3LoadExec(PVM pVM, PSSMHANDLE pSSM, uint32_t uVersi if (!(pDevIns->Internal.s.fIntFlags & PDMDEVINSINT_FLAGS_FOUND)) { LogRel(("Device '%s'/%d not found in the saved state\n", pDevIns->pReg->szName, pDevIns->iInstance)); - if (SSMR3HandleGetAfter(pSSM) != SSMAFTER_DEBUG_IT) + /** @todo The TPM PPI device was added due to @bugref{10701} and it is not an issue if it isn't there + * in the saved state because there is nothing to load. It might make sense to add a new + * flag to PDMDEVREG::fFlags to indicate that having a new device added for a saved state is okay. + * (For now I just want to get saved states unwedged). + */ + if ( SSMR3HandleGetAfter(pSSM) != SSMAFTER_DEBUG_IT + && RTStrCmp(pDevIns->pReg->szName, "tpm-ppi")) return SSMR3SetCfgError(pSSM, RT_SRC_POS, N_("Device '%s'/%d not found in the saved state"), pDevIns->pReg->szName, pDevIns->iInstance); } -- cgit v1.2.3