From 584eba3ab66c8f95e2344cf7115ec2fb13604eb1 Mon Sep 17 00:00:00 2001 From: Lena Olson Date: Tue, 11 Sep 2012 14:14:49 -0400 Subject: 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. --- src/mem/cache/tags/fa_lru.cc | 9 +++------ src/mem/cache/tags/fa_lru.hh | 2 +- src/mem/cache/tags/iic.cc | 2 +- src/mem/cache/tags/iic.hh | 2 +- src/mem/cache/tags/lru.cc | 32 +++++++++++++++----------------- src/mem/cache/tags/lru.hh | 2 +- 6 files changed, 22 insertions(+), 27 deletions(-) (limited to 'src/mem/cache/tags') 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 -- cgit v1.2.3