mem-cache: Delegate block invalidation to block allocation

For a block replacement we first select a victim block, we invalidate
it and then populate it with the new information. Prior to this change
BaseTags::insertBlock() did the invalidation and filled in the block
with the new information. Now that the replacements stat is moved to
the BaseCache, insertBlock does not need to perform the invalidation
and as a result we can unify the block eviction code in BaseCache.

Change-Id: I5bdf00b2dab2752ed2137ab7201ed1dc451333b3
Reviewed-on: https://gem5-review.googlesource.com/10429
Maintainer: Nikos Nikoleris <nikos.nikoleris@arm.com>
Reviewed-by: Jason Lowe-Power <jason@lowepower.com>
Reviewed-by: Daniel Carvalho <odanrc@yahoo.com.br>
This commit is contained in:
Nikos Nikoleris
2018-05-10 11:49:09 +01:00
parent 4976ff51d7
commit a8ac84cdd3
2 changed files with 3 additions and 4 deletions

View File

@@ -1858,6 +1858,7 @@ Cache::allocateBlock(Addr addr, bool is_secure, PacketList &writebacks)
} else {
writebacks.push_back(cleanEvictBlk(blk));
}
invalidateBlock(blk);
replacements++;
}
}

View File

@@ -75,13 +75,11 @@ BaseTags::setCache(BaseCache *_cache)
void
BaseTags::insertBlock(PacketPtr pkt, CacheBlk *blk)
{
assert(!blk->isValid());
// Get address
Addr addr = pkt->getAddr();
if (blk->isValid()) {
invalidate(blk);
}
// Previous block, if existed, has been removed, and now we have
// to insert the new one