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/tport.cc | |
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/tport.cc')
-rw-r--r-- | src/mem/tport.cc | 13 |
1 files changed, 7 insertions, 6 deletions
diff --git a/src/mem/tport.cc b/src/mem/tport.cc index e4b8d70e9..b1a6a4813 100644 --- a/src/mem/tport.cc +++ b/src/mem/tport.cc @@ -30,7 +30,7 @@ #include "mem/tport.hh" -void +bool SimpleTimingPort::checkFunctional(PacketPtr pkt) { DeferredPacketIterator i = transmitList.begin(); @@ -41,19 +41,20 @@ SimpleTimingPort::checkFunctional(PacketPtr pkt) // If the target contains data, and it overlaps the // probed request, need to update data if (pkt->checkFunctional(target)) { - return; + return true; } } + + return false; } void SimpleTimingPort::recvFunctional(PacketPtr pkt) { - checkFunctional(pkt); - - // Just do an atomic access and throw away the returned latency - if (!pkt->isResponse()) + if (!checkFunctional(pkt)) { + // Just do an atomic access and throw away the returned latency recvAtomic(pkt); + } } bool |