diff options
author | Daniel R. Carvalho <odanrc@yahoo.com.br> | 2018-10-25 17:52:26 +0200 |
---|---|---|
committer | Daniel Carvalho <odanrc@yahoo.com.br> | 2018-12-03 15:44:36 +0000 |
commit | ab31213316a6334660eff8fa47434c0e25f2b5c0 (patch) | |
tree | 6a3b08dc29a5a1382f147d571455e63c332249bc /src/mem/cache/tags/sector_blk.hh | |
parent | 9af1214ffe48178c0dadfb874fd62bd0ff2e0f31 (diff) | |
download | gem5-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.hh | 43 |
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__ |