diff options
author | Daniel R. Carvalho <odanrc@yahoo.com.br> | 2018-06-02 15:04:49 +0200 |
---|---|---|
committer | Daniel Carvalho <odanrc@yahoo.com.br> | 2018-06-08 09:37:23 +0000 |
commit | fa44e21f2eb0ea1be035b2a14bd6ad6ada14375b (patch) | |
tree | f2b673c88d86ddf2740b060f9aca81429864a371 | |
parent | f89fe7049d3ae91835bf3c5da72462b60e35d095 (diff) | |
download | gem5-fa44e21f2eb0ea1be035b2a14bd6ad6ada14375b.tar.xz |
mem-cache: Use secure bit in findVictim
Sector caches must know if there was a sector hit in order
to decide whether a victim's sector must be fully evicted
to give place to a new sector or not.
In order to do so it needs the tag and secure information.
Change-Id: Ib554169e25fa131d6bf986561f7970b787c56874
Reviewed-on: https://gem5-review.googlesource.com/10722
Reviewed-by: Nikos Nikoleris <nikos.nikoleris@arm.com>
Maintainer: Nikos Nikoleris <nikos.nikoleris@arm.com>
-rw-r--r-- | src/mem/cache/base.cc | 2 | ||||
-rw-r--r-- | src/mem/cache/tags/base.hh | 5 | ||||
-rw-r--r-- | src/mem/cache/tags/base_set_assoc.hh | 5 | ||||
-rw-r--r-- | src/mem/cache/tags/fa_lru.cc | 3 | ||||
-rw-r--r-- | src/mem/cache/tags/fa_lru.hh | 5 |
5 files changed, 12 insertions, 8 deletions
diff --git a/src/mem/cache/base.cc b/src/mem/cache/base.cc index 75b17699a..fdfe37ef4 100644 --- a/src/mem/cache/base.cc +++ b/src/mem/cache/base.cc @@ -1210,7 +1210,7 @@ BaseCache::allocateBlock(Addr addr, bool is_secure, PacketList &writebacks) { // Find replacement victim std::vector<CacheBlk*> evict_blks; - CacheBlk *victim = tags->findVictim(addr, evict_blks); + CacheBlk *victim = tags->findVictim(addr, is_secure, evict_blks); // It is valid to return nullptr if there is no victim if (!victim) diff --git a/src/mem/cache/tags/base.hh b/src/mem/cache/tags/base.hh index 0cc79020d..7ed90fbd9 100644 --- a/src/mem/cache/tags/base.hh +++ b/src/mem/cache/tags/base.hh @@ -270,11 +270,12 @@ class BaseTags : public ClockedObject * @sa insertBlock * * @param addr Address to find a victim for. + * @param is_secure True if the target memory space is secure. * @param evict_blks Cache blocks to be evicted. * @return Cache block to be replaced. */ - virtual CacheBlk* findVictim(Addr addr, std::vector<CacheBlk*>& evict_blks) - const = 0; + virtual CacheBlk* findVictim(Addr addr, const bool is_secure, + std::vector<CacheBlk*>& evict_blks) const = 0; virtual CacheBlk* accessBlock(Addr addr, bool is_secure, Cycles &lat) = 0; diff --git a/src/mem/cache/tags/base_set_assoc.hh b/src/mem/cache/tags/base_set_assoc.hh index b41c3096c..12b2efb2f 100644 --- a/src/mem/cache/tags/base_set_assoc.hh +++ b/src/mem/cache/tags/base_set_assoc.hh @@ -204,11 +204,12 @@ class BaseSetAssoc : public BaseTags * only contains the victim. * * @param addr Address to find a victim for. + * @param is_secure True if the target memory space is secure. * @param evict_blks Cache blocks to be evicted. * @return Cache block to be replaced. */ - CacheBlk* findVictim(Addr addr, std::vector<CacheBlk*>& evict_blks) const - override + CacheBlk* findVictim(Addr addr, const bool is_secure, + std::vector<CacheBlk*>& evict_blks) const override { // Get possible locations for the victim block std::vector<CacheBlk*> locations = getPossibleLocations(addr); diff --git a/src/mem/cache/tags/fa_lru.cc b/src/mem/cache/tags/fa_lru.cc index b5950f6cf..3a60e99f9 100644 --- a/src/mem/cache/tags/fa_lru.cc +++ b/src/mem/cache/tags/fa_lru.cc @@ -195,7 +195,8 @@ FALRU::findBlockBySetAndWay(int set, int way) const } CacheBlk* -FALRU::findVictim(Addr addr, std::vector<CacheBlk*>& evict_blks) const +FALRU::findVictim(Addr addr, const bool is_secure, + std::vector<CacheBlk*>& evict_blks) const { // The victim is always stored on the tail for the FALRU FALRUBlk* victim = tail; diff --git a/src/mem/cache/tags/fa_lru.hh b/src/mem/cache/tags/fa_lru.hh index b134417b5..7aec36a61 100644 --- a/src/mem/cache/tags/fa_lru.hh +++ b/src/mem/cache/tags/fa_lru.hh @@ -199,11 +199,12 @@ class FALRU : public BaseTags * only contains the victim. * * @param addr Address to find a victim for. + * @param is_secure True if the target memory space is secure. * @param evict_blks Cache blocks to be evicted. * @return Cache block to be replaced. */ - CacheBlk* findVictim(Addr addr, std::vector<CacheBlk*>& evict_blks) const - override; + CacheBlk* findVictim(Addr addr, const bool is_secure, + std::vector<CacheBlk*>& evict_blks) const override; /** * Insert the new block into the cache and update replacement data. |