mem-cache: Make invalidate a common function between tag classes
authorNikos Nikoleris <nikos.nikoleris@arm.com>
Mon, 31 Oct 2016 13:33:35 +0000 (13:33 +0000)
committerNikos Nikoleris <nikos.nikoleris@arm.com>
Wed, 7 Mar 2018 10:33:36 +0000 (10:33 +0000)
invalidate was defined as a separate function in the base associative
and fully-associative tags classes although both functions should
implement identical functionality. This patch moves the invalidate
function in the base tags class.

Change-Id: I206ee969b00ab9e05873c6d87531474fcd712907
Reviewed-by: Andreas Sandberg <andreas.sandberg@arm.com>
Reviewed-on: https://gem5-review.googlesource.com/8286
Reviewed-by: Daniel Carvalho <odanrc@yahoo.com.br>
Maintainer: Nikos Nikoleris <nikos.nikoleris@arm.com>

src/mem/cache/blk.hh
src/mem/cache/tags/base.hh
src/mem/cache/tags/base_set_assoc.hh
src/mem/cache/tags/fa_lru.cc
src/mem/cache/tags/lru.hh
src/mem/cache/tags/random_repl.cc
src/mem/cache/tags/random_repl.hh

index 44691c1229971dbfcb3a7033ddf97304d03fd660..66f05c88479d1a8eccd891ec102cf3368b3e9e98 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012-2016 ARM Limited
+ * Copyright (c) 2012-2017 ARM Limited
  * All rights reserved.
  *
  * The license below extends only to copyright in the software and shall
@@ -164,12 +164,9 @@ class CacheBlk
   public:
 
     CacheBlk()
-        : task_id(ContextSwitchTaskId::Unknown),
-          tag(0), data(0), status(0), whenReady(0),
-          set(-1), way(-1), isTouched(false), refCount(0),
-          srcMasterId(Request::invldMasterId),
-          tickInserted(0)
-    {}
+    {
+        invalidate();
+    }
 
     CacheBlk(const CacheBlk&) = delete;
     CacheBlk& operator=(const CacheBlk&) = delete;
@@ -210,8 +207,14 @@ class CacheBlk
      */
     void invalidate()
     {
+        tag = MaxAddr;
+        task_id = ContextSwitchTaskId::Unknown;
         status = 0;
+        whenReady = MaxTick;
         isTouched = false;
+        refCount = 0;
+        srcMasterId = Request::invldMasterId;
+        tickInserted = MaxTick;
         lockList.clear();
     }
 
index 9714d9aa23d5eab3430ae7e66089e5a00ef6e4a7..dfd8aeb62258cce5371e524f5f09c0b32a2ed148 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012-2014,2016 ARM Limited
+ * Copyright (c) 2012-2014,2016-2017 ARM Limited
  * All rights reserved.
  *
  * The license below extends only to copyright in the software and shall
@@ -236,7 +236,18 @@ class BaseTags : public ClockedObject
         return -1;
     }
 
-    virtual void invalidate(CacheBlk *blk) = 0;
+    /**
+     * This function updates the tags when a block is invalidated but
+     * does not invalidate the block itself.
+     * @param blk The block to invalidate.
+     */
+    virtual void invalidate(CacheBlk *blk)
+    {
+        assert(blk);
+        assert(blk->isValid());
+        tagsInUse--;
+        occupancies[blk->srcMasterId]--;
+    }
 
     virtual CacheBlk* accessBlock(Addr addr, bool is_secure, Cycles &lat) = 0;
 
index 44f68d5fcf2d6692672854571ca2d881acac8b7a..835b0cfd4592eeebb5950f8b5ccde34ea2653e79 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012-2014 ARM Limited
+ * Copyright (c) 2012-2014,2017 ARM Limited
  * All rights reserved.
  *
  * The license below extends only to copyright in the software and shall
@@ -72,7 +72,6 @@
  * BlkType* accessBlock();
  * BlkType* findVictim();
  * void insertBlock();
- * void invalidate();
  */
 class BaseSetAssoc : public BaseTags
 {
@@ -133,22 +132,6 @@ public:
      */
     CacheBlk *findBlockBySetAndWay(int set, int way) const override;
 
-    /**
-     * Invalidate the given block.
-     * @param blk The block to invalidate.
-     */
-    void invalidate(CacheBlk *blk) override
-    {
-        assert(blk);
-        assert(blk->isValid());
-        tagsInUse--;
-        assert(blk->srcMasterId < cache->system->maxMasters());
-        occupancies[blk->srcMasterId]--;
-        blk->srcMasterId = Request::invldMasterId;
-        blk->task_id = ContextSwitchTaskId::Unknown;
-        blk->tickInserted = curTick();
-    }
-
     /**
      * Access block and update replacement data. May not succeed, in which case
      * nullptr is returned. This has all the implications of a cache
index 1ee34b7d840c97de092f0c51b43b081ee198c652..d40398975205e5817f3b725d6b6d24b23bbe69b0 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013,2016 ARM Limited
+ * Copyright (c) 2013,2016-2017 ARM Limited
  * All rights reserved.
  *
  * The license below extends only to copyright in the software and shall
@@ -163,8 +163,8 @@ FALRU::hashLookup(Addr addr) const
 void
 FALRU::invalidate(CacheBlk *blk)
 {
-    assert(blk);
-    tagsInUse--;
+    // TODO: We need to move the block to the tail to make it the next victim
+    BaseTags::invalidate(blk);
 }
 
 CacheBlk*
index d38b94ed324946b7dea1647a72647edb445e659f..530b07ad7fddcfe660e789b44d3300a540ad537c 100644 (file)
@@ -72,7 +72,7 @@ class LRU : public BaseSetAssoc
     CacheBlk* accessBlock(Addr addr, bool is_secure, Cycles &lat);
     CacheBlk* findVictim(Addr addr);
     void insertBlock(PacketPtr pkt, BlkType *blk);
-    void invalidate(CacheBlk *blk);
+    void invalidate(CacheBlk *blk) override;
 };
 
 #endif // __MEM_CACHE_TAGS_LRU_HH__
index ab51f640770c0a9560f107e1fb2e24eab203e9c4..c06b120963b80093343f4f30ce302a7c62795e07 100644 (file)
@@ -1,4 +1,16 @@
 /*
+ * Copyright (c) 2017 ARM Limited
+ * All rights reserved.
+ *
+ * The license below extends only to copyright in the software and shall
+ * not be construed as granting a license to any other intellectual
+ * property including but not limited to intellectual property relating
+ * to a hardware implementation of the functionality of the software
+ * licensed hereunder.  You may use the software subject to the license
+ * terms below provided that you ensure that this notice is replicated
+ * unmodified and in its entirety in all distributions of the software,
+ * modified or unmodified, in source code or in binary form.
+ *
  * Copyright (c) 2014 The Regents of The University of Michigan
  * Copyright (c) 2016 ARM Limited
  * All rights reserved.
@@ -86,12 +98,6 @@ RandomRepl::insertBlock(PacketPtr pkt, BlkType *blk)
     BaseSetAssoc::insertBlock(pkt, blk);
 }
 
-void
-RandomRepl::invalidate(CacheBlk *blk)
-{
-    BaseSetAssoc::invalidate(blk);
-}
-
 RandomRepl*
 RandomReplParams::create()
 {
index 8f08a703418091591f7ea5ad7cda73e73405519a..71b2f5ce6a9617bb8fc1d6b9bbb6a996244ecc73 100644 (file)
@@ -1,4 +1,16 @@
 /*
+ * Copyright (c) 2017 ARM Limited
+ * All rights reserved.
+ *
+ * The license below extends only to copyright in the software and shall
+ * not be construed as granting a license to any other intellectual
+ * property including but not limited to intellectual property relating
+ * to a hardware implementation of the functionality of the software
+ * licensed hereunder.  You may use the software subject to the license
+ * terms below provided that you ensure that this notice is replicated
+ * unmodified and in its entirety in all distributions of the software,
+ * modified or unmodified, in source code or in binary form.
+ *
  * Copyright (c) 2014 The Regents of The University of Michigan
  * All rights reserved.
  *
@@ -61,7 +73,6 @@ class RandomRepl : public BaseSetAssoc
     CacheBlk* accessBlock(Addr addr, bool is_secure, Cycles &lat);
     CacheBlk* findVictim(Addr addr);
     void insertBlock(PacketPtr pkt, BlkType *blk);
-    void invalidate(CacheBlk *blk);
 };
 
 #endif // __MEM_CACHE_TAGS_RANDOM_REPL_HH__