mem-cache: Use ReplaceableEntry in findBlockBySetAndWay
authorDaniel R. Carvalho <odanrc@yahoo.com.br>
Fri, 20 Apr 2018 15:15:41 +0000 (17:15 +0200)
committerDaniel Carvalho <odanrc@yahoo.com.br>
Fri, 8 Jun 2018 09:33:39 +0000 (09:33 +0000)
With a sector cache you can't find a block using only its set
and way, as there is the sector offset to take into account. As
all of these blocks inherit from ReplaceableEntry, the return
type of this function has been updated.

This function has also been declared closer to findBlock() due
to their similar functionality.

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

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
src/mem/cache/tags/fa_lru.hh

index 358ad1003d0e2f88316b08257779b6d49f81077c..167364ff1dbda9ec175f59194ff1e1e3e1dda5da 100644 (file)
@@ -195,6 +195,15 @@ class BaseTags : public ClockedObject
      */
     virtual CacheBlk * findBlock(Addr addr, bool is_secure) const = 0;
 
+    /**
+     * Find a block given set and way.
+     *
+     * @param set The set of the block.
+     * @param way The way of the block.
+     * @return The block.
+     */
+    virtual ReplaceableEntry* findBlockBySetAndWay(int set, int way) const = 0;
+
     /**
      * Align an address to the block size.
      * @param addr the address to align.
@@ -215,14 +224,6 @@ class BaseTags : public ClockedObject
         return (addr & blkMask);
     }
 
-    /**
-     * Find the cache block given set and way
-     * @param set The set of the block.
-     * @param way The way of the block.
-     * @return The cache block.
-     */
-    virtual CacheBlk *findBlockBySetAndWay(int set, int way) const = 0;
-
     /**
      * Limit the allocation for the cache ways.
      * @param ways The maximum number of ways available for replacement.
index 9cd93dbea9c381fb0223bb12b42a3ed3900efdf5..ae98dcf3d5105cda732336bdc333bc05ae8e3359 100644 (file)
@@ -126,7 +126,7 @@ BaseSetAssoc::findBlock(Addr addr, bool is_secure) const
     return blk;
 }
 
-CacheBlk*
+ReplaceableEntry*
 BaseSetAssoc::findBlockBySetAndWay(int set, int way) const
 {
     return sets[set].blks[way];
index 830af6f3d706c0631bf54cbdc2bffcceeb05375f..47556626843d7d4e09c7972803c6cd8033d5225c 100644 (file)
@@ -129,14 +129,6 @@ class BaseSetAssoc : public BaseTags
      */
     void invalidate(CacheBlk *blk) override;
 
-    /**
-     * Find the cache block given set and way
-     * @param set The set of the block.
-     * @param way The way of the block.
-     * @return The cache block.
-     */
-    CacheBlk *findBlockBySetAndWay(int set, int way) const override;
-
     /**
      * Access block and update replacement data. May not succeed, in which case
      * nullptr is returned. This has all the implications of a cache
@@ -198,6 +190,15 @@ class BaseSetAssoc : public BaseTags
      */
     CacheBlk* findBlock(Addr addr, bool is_secure) const override;
 
+    /**
+     * Find a block given set and way.
+     *
+     * @param set The set of the block.
+     * @param way The way of the block.
+     * @return The block.
+     */
+    ReplaceableEntry* findBlockBySetAndWay(int set, int way) const override;
+
     /**
      * Find replacement victim based on address.
      *
index 29dab3b6424faa7ee8e63fc8fe22b30fc7d11946..a6e1b3be1401ab4d62ece2f6dd160dded8c414c5 100644 (file)
@@ -185,7 +185,7 @@ FALRU::findBlock(Addr addr, bool is_secure) const
     return blk;
 }
 
-CacheBlk*
+ReplaceableEntry*
 FALRU::findBlockBySetAndWay(int set, int way) const
 {
     assert(set == 0);
index dbb39b7d10a81471ac52d30a23532105aafa55b3..22b67c534d9c206b28ba30c41dedb87907afe206 100644 (file)
@@ -185,6 +185,15 @@ class FALRU : public BaseTags
      */
     CacheBlk* findBlock(Addr addr, bool is_secure) const override;
 
+    /**
+     * Find a block given set and way.
+     *
+     * @param set The set of the block.
+     * @param way The way of the block.
+     * @return The block.
+     */
+    ReplaceableEntry* findBlockBySetAndWay(int set, int way) const override;
+
     /**
      * Find replacement victim based on address.
      *
@@ -201,14 +210,6 @@ class FALRU : public BaseTags
      */
     void insertBlock(PacketPtr pkt, CacheBlk *blk) override;
 
-    /**
-     * Find the cache block given set and way
-     * @param set The set of the block.
-     * @param way The way of the block.
-     * @return The cache block.
-     */
-    CacheBlk* findBlockBySetAndWay(int set, int way) const override;
-
     /**
      * Generate the tag from the addres. For fully associative this is just the
      * block address.