diff options
author | Steve Reinhardt <stever@gmail.com> | 2007-07-29 20:17:03 -0700 |
---|---|---|
committer | Steve Reinhardt <stever@gmail.com> | 2007-07-29 20:17:03 -0700 |
commit | 2f93db6f95b02d2bedf9571330a3185ac3fa7fa9 (patch) | |
tree | 307e0050c41df9aa9bc90c3294f7aae3c57be2e1 /src/mem/cache | |
parent | 08474ccf68e14f59b4517c6024a9bc6ecbd4a1d5 (diff) | |
download | gem5-2f93db6f95b02d2bedf9571330a3185ac3fa7fa9.tar.xz |
memory system: fix functional access bug.
Make sure not to keep processing functional accesses
after they've been responded to.
Also use checkFunctional() return value instead of checking
packet command field where possible, mostly just for consistency.
--HG--
extra : convert_revision : 29fc76bc18731bd93a4ed05a281297827028ef75
Diffstat (limited to 'src/mem/cache')
-rw-r--r-- | src/mem/cache/base_cache.cc | 4 | ||||
-rw-r--r-- | src/mem/cache/cache_impl.hh | 8 |
2 files changed, 6 insertions, 6 deletions
diff --git a/src/mem/cache/base_cache.cc b/src/mem/cache/base_cache.cc index ec9e1cf9b..b44468486 100644 --- a/src/mem/cache/base_cache.cc +++ b/src/mem/cache/base_cache.cc @@ -81,9 +81,9 @@ BaseCache::CachePort::deviceBlockSize() void BaseCache::CachePort::checkAndSendFunctional(PacketPtr pkt) { - checkFunctional(pkt); - if (!pkt->isResponse()) + if (!checkFunctional(pkt)) { sendFunctional(pkt); + } } diff --git a/src/mem/cache/cache_impl.hh b/src/mem/cache/cache_impl.hh index c1b01d676..d144266ed 100644 --- a/src/mem/cache/cache_impl.hh +++ b/src/mem/cache/cache_impl.hh @@ -1253,9 +1253,9 @@ template<class TagStore> void Cache<TagStore>::CpuSidePort::recvFunctional(PacketPtr pkt) { - checkFunctional(pkt); - if (!pkt->isResponse()) + if (!checkFunctional(pkt)) { myCache()->functionalAccess(pkt, cache->memSidePort); + } } @@ -1327,9 +1327,9 @@ template<class TagStore> void Cache<TagStore>::MemSidePort::recvFunctional(PacketPtr pkt) { - checkFunctional(pkt); - if (!pkt->isResponse()) + if (!checkFunctional(pkt)) { myCache()->functionalAccess(pkt, cache->cpuSidePort); + } } |