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>
This commit is contained in:
committed by
Daniel Carvalho
parent
f89fe7049d
commit
fa44e21f2e
2
src/mem/cache/base.cc
vendored
2
src/mem/cache/base.cc
vendored
@@ -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)
|
||||
|
||||
5
src/mem/cache/tags/base.hh
vendored
5
src/mem/cache/tags/base.hh
vendored
@@ -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;
|
||||
|
||||
|
||||
5
src/mem/cache/tags/base_set_assoc.hh
vendored
5
src/mem/cache/tags/base_set_assoc.hh
vendored
@@ -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);
|
||||
|
||||
3
src/mem/cache/tags/fa_lru.cc
vendored
3
src/mem/cache/tags/fa_lru.cc
vendored
@@ -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;
|
||||
|
||||
5
src/mem/cache/tags/fa_lru.hh
vendored
5
src/mem/cache/tags/fa_lru.hh
vendored
@@ -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.
|
||||
|
||||
Reference in New Issue
Block a user