summaryrefslogtreecommitdiff
path: root/src/arch/arm/tlb.cc
diff options
context:
space:
mode:
authorMrinmoy Ghosh <mrinmoy.ghosh@arm.com>2013-02-15 17:40:10 -0500
committerMrinmoy Ghosh <mrinmoy.ghosh@arm.com>2013-02-15 17:40:10 -0500
commit8cef39fb6742d834e383f533539ba90f72bbc7d9 (patch)
treeb390315c48692bcb3fce65bfda3fb747600b93bb /src/arch/arm/tlb.cc
parent3af59ab386ba297b99d2a215f4c5efa10d0cfe56 (diff)
downloadgem5-8cef39fb6742d834e383f533539ba90f72bbc7d9.tar.xz
arm: fix a page table walker issue where a page could be translated multiple times
If multiple memory operations to the same page are miss the TLB they are all inserted into the page table queue and before this change could result in multiple uncessesary walks as well as duplicate enteries being inserted into the TLB.
Diffstat (limited to 'src/arch/arm/tlb.cc')
-rw-r--r--src/arch/arm/tlb.cc2
1 files changed, 1 insertions, 1 deletions
diff --git a/src/arch/arm/tlb.cc b/src/arch/arm/tlb.cc
index 170d819d8..6b864b980 100644
--- a/src/arch/arm/tlb.cc
+++ b/src/arch/arm/tlb.cc
@@ -107,7 +107,7 @@ TLB::lookup(Addr va, uint8_t cid, bool functional)
if (table[x].match(va, cid)) {
// We only move the hit entry ahead when the position is higher than rangeMRU
- if (x > rangeMRU) {
+ if (x > rangeMRU && !functional) {
TlbEntry tmp_entry = table[x];
for(int i = x; i > 0; i--)
table[i] = table[i-1];