From abdfd9500e07fab7d6ffd4385fa30a065c329a39 Mon Sep 17 00:00:00 2001
From: "Edgar E. Iglesias" <edgar.iglesias@gmail.com>
Date: Thu, 16 Sep 2010 15:40:27 +0200
Subject: [PATCH] cris: Avoid spurios hw_abort on recursive bus faults

Signed-off-by: Edgar E. Iglesias <edgar.iglesias@gmail.com>
---
 target-cris/helper.c | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/target-cris/helper.c b/target-cris/helper.c
index 053ed4ab2a..83b25c14da 100644
--- a/target-cris/helper.c
+++ b/target-cris/helper.c
@@ -235,9 +235,15 @@ void do_interrupt(CPUState *env)
 	/* Apply the CRIS CCS shift. Clears U if set.  */
 	cris_shift_ccs(env);
 
-	/* Now that we are in kernel mode, load the handlers address.  */
+	/* Now that we are in kernel mode, load the handlers address.
+	   This load may not fault, real hw leaves that behaviour as
+	   undefined.  */
 	env->pc = ldl_code(env->pregs[PR_EBP] + ex_vec * 4);
 
+	/* Clear the excption_index to avoid spurios hw_aborts for recursive
+	   bus faults.  */
+	env->exception_index = -1;
+
 	D_LOG("%s isr=%x vec=%x ccs=%x pid=%d erp=%x\n",
 		   __func__, env->pc, ex_vec,
 		   env->pregs[PR_CCS],