summaryrefslogtreecommitdiff
path: root/src/mem/cache/tags/sector_blk.hh
diff options
context:
space:
mode:
authorDaniel R. Carvalho <odanrc@yahoo.com.br>2018-10-25 17:52:26 +0200
committerDaniel Carvalho <odanrc@yahoo.com.br>2018-12-03 15:44:36 +0000
commitab31213316a6334660eff8fa47434c0e25f2b5c0 (patch)
tree6a3b08dc29a5a1382f147d571455e63c332249bc /src/mem/cache/tags/sector_blk.hh
parent9af1214ffe48178c0dadfb874fd62bd0ff2e0f31 (diff)
downloadgem5-ab31213316a6334660eff8fa47434c0e25f2b5c0.tar.xz
mem-cache: Optimize sector valid and secure check
Previously a loop was being done to check whether the block was valid/secure or not. Variables have been added to skip this loop and save and update sector block state when sub-blocks are validated, invalidated and secured. Change-Id: Ie1734f7dfda9698c7bf22a1fcbfc47ffb9239cea Signed-off-by: Daniel R. Carvalho <odanrc@yahoo.com.br> Reviewed-on: https://gem5-review.googlesource.com/c/14363 Reviewed-by: Jason Lowe-Power <jason@lowepower.com> Maintainer: Jason Lowe-Power <jason@lowepower.com>
Diffstat (limited to 'src/mem/cache/tags/sector_blk.hh')
-rw-r--r--src/mem/cache/tags/sector_blk.hh43
1 files changed, 42 insertions, 1 deletions
diff --git a/src/mem/cache/tags/sector_blk.hh b/src/mem/cache/tags/sector_blk.hh
index 12649fce2..264836ca2 100644
--- a/src/mem/cache/tags/sector_blk.hh
+++ b/src/mem/cache/tags/sector_blk.hh
@@ -102,6 +102,21 @@ class SectorSubBlk : public CacheBlk
Addr getTag() const;
/**
+ * Set valid bit and inform sector block.
+ */
+ void setValid() override;
+
+ /**
+ * Set secure bit and inform sector block.
+ */
+ void setSecure() override;
+
+ /**
+ * Invalidate the block and inform sector block.
+ */
+ void invalidate() override;
+
+ /**
* Set member variables when a block insertion occurs. Resets reference
* count to 1 (the insertion counts as a reference), and touch block if
* it hadn't been touched previously. Sets the insertion tick to the
@@ -135,8 +150,19 @@ class SectorBlk : public ReplaceableEntry
*/
Addr _tag;
+ /**
+ * Counter of the number of valid sub-blocks. The sector is valid if any
+ * of its sub-blocks is valid.
+ */
+ uint8_t _validCounter;
+
+ /**
+ * Whether sector blk is in secure-space or not.
+ */
+ bool _secureBit;
+
public:
- SectorBlk() : ReplaceableEntry(), _tag(MaxAddr) {}
+ SectorBlk();
SectorBlk(const SectorBlk&) = delete;
SectorBlk& operator=(const SectorBlk&) = delete;
~SectorBlk() {};
@@ -173,6 +199,21 @@ class SectorBlk : public ReplaceableEntry
* @return The tag value.
*/
Addr getTag() const;
+
+ /**
+ * Increase the number of valid sub-blocks.
+ */
+ void validateSubBlk();
+
+ /**
+ * Decrease the number of valid sub-blocks.
+ */
+ void invalidateSubBlk();
+
+ /**
+ * Set secure bit.
+ */
+ void setSecure();
};
#endif //__MEM_CACHE_TAGS_SECTOR_BLK_HH__