diff options
author | Ron Dreslinski <rdreslin@umich.edu> | 2006-08-16 15:54:02 -0400 |
---|---|---|
committer | Ron Dreslinski <rdreslin@umich.edu> | 2006-08-16 15:54:02 -0400 |
commit | 8a82553aec48029a7752f7192ca1c65236192cce (patch) | |
tree | 1b00f5f6ce755d4fb70ae7f33791f85b1bd38d7f /src/mem/cache/base_cache.hh | |
parent | 890f0fc782b939a72c907ebf49866c634cfa3454 (diff) | |
download | gem5-8a82553aec48029a7752f7192ca1c65236192cce.tar.xz |
Fixes for blocking in the caches that needed to be pulled
src/mem/cache/base_cache.cc:
Add in retry path for blocking with multi-level caches
src/mem/cache/base_cache.hh:
Pull more of the blocking fixes into head
src/mem/packet.hh:
Fix typo
--HG--
extra : convert_revision : d4d149adfa414136ebd2c4789b739bb065710f7a
Diffstat (limited to 'src/mem/cache/base_cache.hh')
-rw-r--r-- | src/mem/cache/base_cache.hh | 24 |
1 files changed, 16 insertions, 8 deletions
diff --git a/src/mem/cache/base_cache.hh b/src/mem/cache/base_cache.hh index 9fb790cee..069dbab58 100644 --- a/src/mem/cache/base_cache.hh +++ b/src/mem/cache/base_cache.hh @@ -98,6 +98,8 @@ class BaseCache : public MemObject virtual int deviceBlockSize(); + virtual void recvRetry(); + public: void setBlocked(); @@ -407,17 +409,23 @@ class BaseCache : public MemObject void clearBlocked(BlockedCause cause) { uint8_t flag = 1 << cause; - blocked &= ~flag; - blockedSnoop &= ~flag; DPRINTF(Cache,"Unblocking for cause %s, causes left=%i\n", cause, blocked); - if (!isBlocked()) { - blocked_cycles[cause] += curTick - blockedCycle; - DPRINTF(Cache,"Unblocking from all causes\n"); - cpuSidePort->clearBlocked(); + if (blocked & flag) + { + blocked &= ~flag; + if (!isBlocked()) { + blocked_cycles[cause] += curTick - blockedCycle; + DPRINTF(Cache,"Unblocking from all causes\n"); + cpuSidePort->clearBlocked(); + } } - if (!isBlockedForSnoop()) { - memSidePort->clearBlocked(); + if (blockedSnoop & flag) + { + blockedSnoop &= ~flag; + if (!isBlockedForSnoop()) { + memSidePort->clearBlocked(); + } } } |