summaryrefslogtreecommitdiff
path: root/src/arch/arm/tlb.cc
diff options
context:
space:
mode:
authorAli Saidi <Ali.Saidi@ARM.com>2011-02-23 15:10:49 -0600
committerAli Saidi <Ali.Saidi@ARM.com>2011-02-23 15:10:49 -0600
commitae3d45685512b75f878eb9d7917680fc3971988e (patch)
treeda8a195456de67473cb0a950600b3bcf4fb3d0ee /src/arch/arm/tlb.cc
parentf05f35df99e2b9be3353d7585142b91139965e22 (diff)
downloadgem5-ae3d45685512b75f878eb9d7917680fc3971988e.tar.xz
ARM: Fix bug that let two table walks occur in parallel.
Diffstat (limited to 'src/arch/arm/tlb.cc')
-rw-r--r--src/arch/arm/tlb.cc4
1 files changed, 3 insertions, 1 deletions
diff --git a/src/arch/arm/tlb.cc b/src/arch/arm/tlb.cc
index 230c56200..f1c8ae41a 100644
--- a/src/arch/arm/tlb.cc
+++ b/src/arch/arm/tlb.cc
@@ -529,7 +529,7 @@ TLB::translateFs(RequestPtr req, ThreadContext *tc, Mode mode,
vaddr, contextId);
fault = tableWalker->walk(req, tc, contextId, mode, translation,
timing);
- if (timing) {
+ if (timing && fault == NoFault) {
delay = true;
// for timing mode, return and wait for table walk
return fault;
@@ -694,6 +694,8 @@ TLB::translateTiming(RequestPtr req, ThreadContext *tc,
#else
fault = translateSe(req, tc, mode, translation, delay, true);
#endif
+ DPRINTF(TLB, "Translation returning delay=%d fault=%d\n", delay, fault !=
+ NoFault);
if (!delay)
translation->finish(fault, req, tc, mode);
else