summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel R. Carvalho <odanrc@yahoo.com.br>2018-04-18 19:42:15 +0200
committerDaniel Carvalho <odanrc@yahoo.com.br>2018-04-19 16:01:46 +0000
commitb11a6d508c618b33f8626afc6742773cbb293f66 (patch)
tree73c8ece6e043c9b6300bf60ca93b0b92390ad33e
parent26f6b94584c56ffe23336690ec899c78db517261 (diff)
downloadgem5-b11a6d508c618b33f8626afc6742773cbb293f66.tar.xz
mem-cache: Use findBlock in FALRU's block access
An access must perform a block search, which is done by findBlock. The tagHash is indexed by tags, so use extractTag instead of re- implementing its functionality. Change-Id: Ib5abacbc65cddf0f2d7e4440eb5355b56998a585 Reviewed-on: https://gem5-review.googlesource.com/10082 Reviewed-by: Jason Lowe-Power <jason@lowepower.com> Maintainer: Jason Lowe-Power <jason@lowepower.com>
-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;