summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/mem/cache/tags/base.cc8
-rw-r--r--src/mem/cache/tags/base.hh11
2 files changed, 8 insertions, 11 deletions
diff --git a/src/mem/cache/tags/base.cc b/src/mem/cache/tags/base.cc
index 0087de818..dfd6976fd 100644
--- a/src/mem/cache/tags/base.cc
+++ b/src/mem/cache/tags/base.cc
@@ -78,16 +78,8 @@ BaseTags::insertBlock(PacketPtr pkt, CacheBlk *blk)
// Get address
Addr addr = pkt->getAddr();
- // If we're replacing a block that was previously valid update
- // stats for it. This can't be done in findBlock() because a
- // found block might not actually be replaced there if the
- // coherence protocol says it can't be.
if (blk->isValid()) {
- totalRefs += blk->refCount;
- ++sampledRefs;
-
invalidate(blk);
- blk->invalidate();
}
// Previous block, if existed, has been removed, and now we have
diff --git a/src/mem/cache/tags/base.hh b/src/mem/cache/tags/base.hh
index c04329fe9..47bab4323 100644
--- a/src/mem/cache/tags/base.hh
+++ b/src/mem/cache/tags/base.hh
@@ -239,16 +239,21 @@ class BaseTags : public ClockedObject
}
/**
- * This function updates the tags when a block is invalidated but
- * does not invalidate the block itself.
- * @param blk The block to invalidate.
+ * This function updates the tags when a block is invalidated
+ *
+ * @param blk A valid block to invalidate.
*/
virtual void invalidate(CacheBlk *blk)
{
assert(blk);
assert(blk->isValid());
+
tagsInUse--;
occupancies[blk->srcMasterId]--;
+ totalRefs += blk->refCount;
+ sampledRefs++;
+
+ blk->invalidate();
}
/**