summaryrefslogtreecommitdiff
path: root/src/arch/arm/table_walker.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/arch/arm/table_walker.cc')
-rw-r--r--src/arch/arm/table_walker.cc16
1 files changed, 13 insertions, 3 deletions
diff --git a/src/arch/arm/table_walker.cc b/src/arch/arm/table_walker.cc
index 30fdf9811..6a0f0144a 100644
--- a/src/arch/arm/table_walker.cc
+++ b/src/arch/arm/table_walker.cc
@@ -344,12 +344,22 @@ TableWalker::processWalkWrapper()
// We've got a valid request, lets process it
pending = true;
pendingQueue.pop_front();
+ // Keep currState in case one of the processWalk... calls NULLs it
+ WalkerState *curr_state_copy = currState;
+ Fault f;
if (currState->aarch64)
- processWalkAArch64();
+ f = processWalkAArch64();
else if ((_haveLPAE && currState->ttbcr.eae) || currState->isHyp || isStage2)
- processWalkLPAE();
+ f = processWalkLPAE();
else
- processWalk();
+ f = processWalk();
+
+ if (f != NoFault) {
+ curr_state_copy->transState->finish(f, curr_state_copy->req,
+ curr_state_copy->tc, curr_state_copy->mode);
+
+ delete curr_state_copy;
+ }
return;
}