summaryrefslogtreecommitdiff
path: root/src/mem/cache
diff options
context:
space:
mode:
authorSteve Reinhardt <stever@gmail.com>2007-07-29 20:17:03 -0700
committerSteve Reinhardt <stever@gmail.com>2007-07-29 20:17:03 -0700
commit2f93db6f95b02d2bedf9571330a3185ac3fa7fa9 (patch)
tree307e0050c41df9aa9bc90c3294f7aae3c57be2e1 /src/mem/cache
parent08474ccf68e14f59b4517c6024a9bc6ecbd4a1d5 (diff)
downloadgem5-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.cc4
-rw-r--r--src/mem/cache/cache_impl.hh8
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);
+ }
}