mem-cache: Move tagsInUse to children
authorDaniel R. Carvalho <odanrc@yahoo.com.br>
Sat, 2 Jun 2018 12:51:59 +0000 (14:51 +0200)
committerDaniel Carvalho <odanrc@yahoo.com.br>
Fri, 8 Jun 2018 09:37:23 +0000 (09:37 +0000)
Move tagsInUse to children, as sector caches have different
tag invalidation and insertion, and thus they must handle
updating this variable.

Change-Id: I875c9b7364a909c76daf610d1e226c4e82063870
Reviewed-on: https://gem5-review.googlesource.com/10721
Reviewed-by: Nikos Nikoleris <nikos.nikoleris@arm.com>
Maintainer: Nikos Nikoleris <nikos.nikoleris@arm.com>

src/mem/cache/tags/base.cc
src/mem/cache/tags/base.hh
src/mem/cache/tags/base_set_assoc.cc
src/mem/cache/tags/base_set_assoc.hh
src/mem/cache/tags/fa_lru.cc

index 13e1245c6bb89add47c3c69258f2e364bf08433e..caed594b8d23a1e7e1773093040113b0ec1010ed 100644 (file)
@@ -99,7 +99,6 @@ BaseTags::insertBlock(PacketPtr pkt, CacheBlk *blk)
     blk->insert(extractTag(addr), pkt->isSecure(), master_id,
                 pkt->req->taskId());
 
-    tagsInUse++;
     if (!warmedUp && tagsInUse.value() >= warmupBound) {
         warmedUp = true;
         warmupCycle = curTick();
index 27771982a9d7c2fac133bdcfb1eb9764383f410a..0cc79020dc9f466dd26ff7c54cb7f6dcfd7233f8 100644 (file)
@@ -253,7 +253,6 @@ class BaseTags : public ClockedObject
         assert(blk);
         assert(blk->isValid());
 
-        tagsInUse--;
         occupancies[blk->srcMasterId]--;
         totalRefs += blk->refCount;
         sampledRefs++;
index ae98dcf3d5105cda732336bdc333bc05ae8e3359..18da532733a0e3ad85bd1528ef7042fabf34a230 100644 (file)
@@ -113,6 +113,9 @@ BaseSetAssoc::invalidate(CacheBlk *blk)
 {
     BaseTags::invalidate(blk);
 
+    // Decrease the number of tags in use
+    tagsInUse--;
+
     // Invalidate replacement data
     replacementPolicy->invalidate(blk->replacementData);
 }
index d19a00ed90baabb9b405db509587739a9daf0a76..b41c3096c782ba35706e5945dab547cfb103dd5c 100644 (file)
@@ -122,8 +122,8 @@ class BaseSetAssoc : public BaseTags
     virtual ~BaseSetAssoc() {};
 
     /**
-     * This function updates the tags when a block is invalidated but does
-     * not invalidate the block itself. It also updates the replacement data.
+     * This function updates the tags when a block is invalidated. It also
+     * updates the replacement data.
      *
      * @param blk The block to invalidate.
      */
@@ -252,6 +252,9 @@ class BaseSetAssoc : public BaseTags
         // Insert block
         BaseTags::insertBlock(pkt, blk);
 
+        // Increment tag counter
+        tagsInUse++;
+
         // Update replacement policy
         replacementPolicy->reset(blk->replacementData);
     }
index 8eab62845d1ba995bda581851433a8e26d9247a8..b5950f6cff48f0a1efb3d1cf8c2eca33df3680ee 100644 (file)
@@ -122,6 +122,9 @@ FALRU::invalidate(CacheBlk *blk)
 {
     BaseTags::invalidate(blk);
 
+    // Decrease the number of tags in use
+    tagsInUse--;
+
     // Move the block to the tail to make it the next victim
     moveToTail((FALRUBlk*)blk);
 
@@ -169,7 +172,6 @@ FALRU::accessBlock(Addr addr, bool is_secure, Cycles &lat,
     return blk;
 }
 
-
 CacheBlk*
 FALRU::findBlock(Addr addr, bool is_secure) const
 {
@@ -215,6 +217,9 @@ FALRU::insertBlock(PacketPtr pkt, CacheBlk *blk)
     // Do common block insertion functionality
     BaseTags::insertBlock(pkt, blk);
 
+    // Increment tag counter
+    tagsInUse++;
+
     // New block is the MRU
     moveToHead(falruBlk);