diff options
author | vboxsync <vboxsync@cfe28804-0f27-0410-a406-dd0f0b0b656f> | 2016-05-08 11:03:39 +0000 |
---|---|---|
committer | vboxsync <vboxsync@cfe28804-0f27-0410-a406-dd0f0b0b656f> | 2016-05-08 11:03:39 +0000 |
commit | 60132cae590c06df9a3c15c034bf48175076c239 (patch) | |
tree | 0f65b785c1befc95d13e170b8bbf89edaae3cf13 /src/VBox/VMM/VMMAll/PATMAll.cpp | |
parent | 9cc285f2961c95b82b2545a6d4d45278231bfd8c (diff) | |
download | VirtualBox-svn-60132cae590c06df9a3c15c034bf48175076c239.tar.gz |
PATMRawLeave: It's okay to end up in ring-3 with a reschduling status code and interrupts disabled, it probably means that IEM as dispatched an exception.
git-svn-id: https://www.virtualbox.org/svn/vbox/trunk@60879 cfe28804-0f27-0410-a406-dd0f0b0b656f
Diffstat (limited to 'src/VBox/VMM/VMMAll/PATMAll.cpp')
-rw-r--r-- | src/VBox/VMM/VMMAll/PATMAll.cpp | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/src/VBox/VMM/VMMAll/PATMAll.cpp b/src/VBox/VMM/VMMAll/PATMAll.cpp index 7f0fd881374..1a6586d59b4 100644 --- a/src/VBox/VMM/VMMAll/PATMAll.cpp +++ b/src/VBox/VMM/VMMAll/PATMAll.cpp @@ -166,10 +166,11 @@ VMM_INT_DECL(void) PATMRawLeave(PVM pVM, PCPUMCTX pCtx, int rawRC) pCtx->eflags.u32 = efl; CTXSUFF(pVM->patm.s.pGCState)->uVMFlags = X86_EFL_IF; - AssertReleaseMsg((efl & X86_EFL_IF) || fPatchCode || rawRC == VINF_PATM_PENDING_IRQ_AFTER_IRET || RT_FAILURE(rawRC), ("Inconsistent state at %RRv rc=%Rrc\n", pCtx->eip, rawRC)); - AssertReleaseMsg(CTXSUFF(pVM->patm.s.pGCState)->fPIF || fPatchCode || RT_FAILURE(rawRC), ("fPIF=%d eip=%RRv rc=%Rrc\n", CTXSUFF(pVM->patm.s.pGCState)->fPIF, pCtx->eip, rawRC)); - #ifdef IN_RING3 + AssertReleaseMsg((efl & X86_EFL_IF) || fPatchCode || rawRC == VINF_PATM_PENDING_IRQ_AFTER_IRET + || rawRC == VINF_EM_RESCHEDULE || rawRC == VINF_EM_RESCHEDULE_REM || RT_FAILURE(rawRC), + ("Inconsistent state at %RRv rc=%Rrc\n", pCtx->eip, rawRC)); + AssertReleaseMsg(CTXSUFF(pVM->patm.s.pGCState)->fPIF || fPatchCode || RT_FAILURE(rawRC), ("fPIF=%d eip=%RRv rc=%Rrc\n", CTXSUFF(pVM->patm.s.pGCState)->fPIF, pCtx->eip, rawRC)); if ( (efl & X86_EFL_IF) && fPatchCode) { @@ -221,6 +222,8 @@ VMM_INT_DECL(void) PATMRawLeave(PVM pVM, PCPUMCTX pCtx, int rawRC) * a single original guest instruction. */ AssertMsg(!fPatchCode, ("eip=%RRv\n", pCtx->eip)); + AssertReleaseMsg((efl & X86_EFL_IF) || fPatchCode || rawRC == VINF_PATM_PENDING_IRQ_AFTER_IRET || RT_FAILURE(rawRC), ("Inconsistent state at %RRv rc=%Rrc\n", pCtx->eip, rawRC)); + AssertReleaseMsg(CTXSUFF(pVM->patm.s.pGCState)->fPIF || fPatchCode || RT_FAILURE(rawRC), ("fPIF=%d eip=%RRv rc=%Rrc\n", CTXSUFF(pVM->patm.s.pGCState)->fPIF, pCtx->eip, rawRC)); #endif /* !IN_RING3 */ if (!fPatchCode) |