summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/mem/cache/tags/fa_lru.cc14
1 files changed, 6 insertions, 8 deletions
diff --git a/src/mem/cache/tags/fa_lru.cc b/src/mem/cache/tags/fa_lru.cc
index f515c4db6..6abae2bb9 100644
--- a/src/mem/cache/tags/fa_lru.cc
+++ b/src/mem/cache/tags/fa_lru.cc
@@ -139,10 +139,9 @@ FALRU::accessBlock(Addr addr, bool is_secure, Cycles &lat,
CachesMask *in_caches_mask)
{
CachesMask mask = 0;
- Addr blkAddr = blkAlign(addr);
- FALRUBlk* blk = hashLookup(blkAddr);
+ FALRUBlk* blk = static_cast<FALRUBlk*>(findBlock(addr, is_secure));
- if (blk && blk->isValid()) {
+ if (blk != nullptr) {
// If a cache hit
lat = accessLatency;
// Check if the block to be accessed is available. If not,
@@ -153,13 +152,12 @@ FALRU::accessBlock(Addr addr, bool is_secure, Cycles &lat,
lat = cache->ticksToCycles(blk->whenReady - curTick()) +
accessLatency;
}
- assert(blk->tag == blkAddr);
mask = blk->inCachesMask;
+
moveToHead(blk);
} else {
// If a cache miss
lat = lookupLatency;
- blk = nullptr;
}
if (in_caches_mask) {
*in_caches_mask = mask;
@@ -174,11 +172,11 @@ FALRU::accessBlock(Addr addr, bool is_secure, Cycles &lat,
CacheBlk*
FALRU::findBlock(Addr addr, bool is_secure) const
{
- Addr blkAddr = blkAlign(addr);
- FALRUBlk* blk = hashLookup(blkAddr);
+ Addr tag = extractTag(addr);
+ FALRUBlk* blk = hashLookup(tag);
if (blk && blk->isValid()) {
- assert(blk->tag == blkAddr);
+ assert(blk->tag == tag);
assert(blk->isSecure() == is_secure);
} else {
blk = nullptr;