summaryrefslogtreecommitdiff
path: root/src/mem/cache/tags
diff options
context:
space:
mode:
authorLena Olson <lena@cs.wisc.edu>2012-09-11 14:14:49 -0400
committerLena Olson <lena@cs.wisc.edu>2012-09-11 14:14:49 -0400
commit584eba3ab66c8f95e2344cf7115ec2fb13604eb1 (patch)
treea616f7cd709a46c6c1fe3c55d4d190f02e5261c7 /src/mem/cache/tags
parentfe5deb4a22260b3e67839fb1efa978cff51e79ba (diff)
downloadgem5-584eba3ab66c8f95e2344cf7115ec2fb13604eb1.tar.xz
Cache: Split invalidateBlk up to seperate block vs. tags
This seperates the functionality to clear the state in a block into blk.hh and the functionality to udpate the tag information into the tags. This gets rid of the case where calling invalidateBlk on an already-invalid block does something different than calling it on a valid block, which was confusing.
Diffstat (limited to 'src/mem/cache/tags')
-rw-r--r--src/mem/cache/tags/fa_lru.cc9
-rw-r--r--src/mem/cache/tags/fa_lru.hh2
-rw-r--r--src/mem/cache/tags/iic.cc2
-rw-r--r--src/mem/cache/tags/iic.hh2
-rw-r--r--src/mem/cache/tags/lru.cc32
-rw-r--r--src/mem/cache/tags/lru.hh2
6 files changed, 22 insertions, 27 deletions
diff --git a/src/mem/cache/tags/fa_lru.cc b/src/mem/cache/tags/fa_lru.cc
index 3a1246ce7..cc2f12eef 100644
--- a/src/mem/cache/tags/fa_lru.cc
+++ b/src/mem/cache/tags/fa_lru.cc
@@ -152,13 +152,10 @@ FALRU::hashLookup(Addr addr) const
}
void
-FALRU::invalidateBlk(FALRU::BlkType *blk)
+FALRU::invalidate(FALRU::BlkType *blk)
{
- if (blk) {
- blk->status = 0;
- blk->isTouched = false;
- tagsInUse--;
- }
+ assert(blk);
+ tagsInUse--;
}
FALRUBlk*
diff --git a/src/mem/cache/tags/fa_lru.hh b/src/mem/cache/tags/fa_lru.hh
index fa1f49a42..66f70a89b 100644
--- a/src/mem/cache/tags/fa_lru.hh
+++ b/src/mem/cache/tags/fa_lru.hh
@@ -168,7 +168,7 @@ public:
* Invalidate a cache block.
* @param blk The block to invalidate.
*/
- void invalidateBlk(BlkType *blk);
+ void invalidate(BlkType *blk);
/**
* Access block and update replacement data. May not succeed, in which case
diff --git a/src/mem/cache/tags/iic.cc b/src/mem/cache/tags/iic.cc
index 3fdc11e80..e8b0a1b29 100644
--- a/src/mem/cache/tags/iic.cc
+++ b/src/mem/cache/tags/iic.cc
@@ -617,7 +617,7 @@ IIC::secondaryChain(Addr tag, unsigned long chain_ptr,
}
void
-IIC::invalidateBlk(IIC::BlkType *tag_ptr)
+IIC::invalidate(IIC::BlkType *tag_ptr)
{
if (tag_ptr) {
for (int i = 0; i < tag_ptr->numData; ++i) {
diff --git a/src/mem/cache/tags/iic.hh b/src/mem/cache/tags/iic.hh
index fd63daff7..97011d1c5 100644
--- a/src/mem/cache/tags/iic.hh
+++ b/src/mem/cache/tags/iic.hh
@@ -408,7 +408,7 @@ class IIC : public BaseTags
* Invalidate a block.
* @param blk The block to invalidate.
*/
- void invalidateBlk(BlkType *blk);
+ void invalidate(BlkType *blk);
/**
* Access block and update replacement data. May not succeed, in which case
diff --git a/src/mem/cache/tags/lru.cc b/src/mem/cache/tags/lru.cc
index c73f557b9..8d32d4b35 100644
--- a/src/mem/cache/tags/lru.cc
+++ b/src/mem/cache/tags/lru.cc
@@ -92,7 +92,7 @@ LRU::LRU(unsigned _numSets, unsigned _blkSize, unsigned _assoc,
++blkIndex;
// invalidate new cache block
- blk->status = 0;
+ blk->invalidate();
//EGH Fix Me : do we need to initialize blk?
@@ -186,8 +186,11 @@ LRU::insertBlock(Addr addr, BlkType *blk, int master_id)
// deal with evicted block
assert(blk->srcMasterId < cache->system->maxMasters());
occupancies[blk->srcMasterId]--;
+
+ blk->invalidate();
}
+ blk->isTouched = true;
// Set tag for new block. Caller is responsible for setting status.
blk->tag = extractTag(addr);
@@ -201,23 +204,18 @@ LRU::insertBlock(Addr addr, BlkType *blk, int master_id)
}
void
-LRU::invalidateBlk(BlkType *blk)
+LRU::invalidate(BlkType *blk)
{
- if (blk) {
- if (blk->isValid()) {
- tagsInUse--;
- assert(blk->srcMasterId < cache->system->maxMasters());
- occupancies[blk->srcMasterId]--;
- blk->srcMasterId = Request::invldMasterId;
- }
- blk->status = 0;
- blk->isTouched = false;
- blk->clearLoadLocks();
-
- // should be evicted before valid blocks
- unsigned set = blk->set;
- sets[set].moveToTail(blk);
- }
+ assert(blk);
+ assert(blk->isValid());
+ tagsInUse--;
+ assert(blk->srcMasterId < cache->system->maxMasters());
+ occupancies[blk->srcMasterId]--;
+ blk->srcMasterId = Request::invldMasterId;
+
+ // should be evicted before valid blocks
+ unsigned set = blk->set;
+ sets[set].moveToTail(blk);
}
void
diff --git a/src/mem/cache/tags/lru.hh b/src/mem/cache/tags/lru.hh
index 4eb66b708..bb1420f71 100644
--- a/src/mem/cache/tags/lru.hh
+++ b/src/mem/cache/tags/lru.hh
@@ -127,7 +127,7 @@ public:
* Invalidate the given block.
* @param blk The block to invalidate.
*/
- void invalidateBlk(BlkType *blk);
+ void invalidate(BlkType *blk);
/**
* Access block and update replacement data. May not succeed, in which case