diff options
author | Ron Dreslinski <rdreslin@umich.edu> | 2006-11-12 09:30:12 -0500 |
---|---|---|
committer | Ron Dreslinski <rdreslin@umich.edu> | 2006-11-12 09:30:12 -0500 |
commit | 5edfaefc78c72540a17f65973118eec873019f17 (patch) | |
tree | b4c84c525adad0f38e1e76133475c164f777ea33 | |
parent | a200bccc2065d776d0face971610588f438998e7 (diff) | |
download | gem5-5edfaefc78c72540a17f65973118eec873019f17.tar.xz |
Physical memory overrides the tport version of recvFunctional, need to do the
check here for responses that match as well
--HG--
extra : convert_revision : 69c3628a381a9da885fab0272abf40c3411a5f0f
-rw-r--r-- | src/mem/physical.cc | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/src/mem/physical.cc b/src/mem/physical.cc index 39eb63108..94f60ad80 100644 --- a/src/mem/physical.cc +++ b/src/mem/physical.cc @@ -288,6 +288,21 @@ PhysicalMemory::MemoryPort::recvAtomic(PacketPtr pkt) void PhysicalMemory::MemoryPort::recvFunctional(PacketPtr pkt) { + //Since we are overriding the function, make sure to have the impl of the + //check or functional accesses here. + std::list<std::pair<Tick,PacketPtr> >::iterator i = transmitList.begin(); + std::list<std::pair<Tick,PacketPtr> >::iterator end = transmitList.end(); + bool notDone = true; + + while (i != end && notDone) { + PacketPtr target = i->second; + // If the target contains data, and it overlaps the + // probed request, need to update data + if (target->intersect(pkt)) + notDone = fixPacket(pkt, target); + i++; + } + // Default implementation of SimpleTimingPort::recvFunctional() // calls recvAtomic() and throws away the latency; we can save a // little here by just not calculating the latency. |