summaryrefslogtreecommitdiff
path: root/src/VBox/VMM/VMMAll/PATMAll.cpp
diff options
context:
space:
mode:
authorvboxsync <vboxsync@cfe28804-0f27-0410-a406-dd0f0b0b656f>2016-05-08 11:03:39 +0000
committervboxsync <vboxsync@cfe28804-0f27-0410-a406-dd0f0b0b656f>2016-05-08 11:03:39 +0000
commit60132cae590c06df9a3c15c034bf48175076c239 (patch)
tree0f65b785c1befc95d13e170b8bbf89edaae3cf13 /src/VBox/VMM/VMMAll/PATMAll.cpp
parent9cc285f2961c95b82b2545a6d4d45278231bfd8c (diff)
downloadVirtualBox-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.cpp9
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)