summaryrefslogtreecommitdiff
path: root/src/mem/physical.cc
diff options
context:
space:
mode:
authorGabe Black <gblack@eecs.umich.edu>2006-11-12 22:36:22 -0500
committerGabe Black <gblack@eecs.umich.edu>2006-11-12 22:36:22 -0500
commit14cb2264c80eb961eab1f80738e0144b6179d1a3 (patch)
tree1b8683e8a28d755abd31fa980c0c5505e92e580b /src/mem/physical.cc
parentfd35f02efe5707539d2268fc844131e737f56983 (diff)
parentd2d44317528ffadf81fbb95c92291d8d2d4a2190 (diff)
downloadgem5-14cb2264c80eb961eab1f80738e0144b6179d1a3.tar.xz
Merge zizzer.eecs.umich.edu:/bk/newmem/
into zeep.eecs.umich.edu:/home/gblack/m5/newmemmemops --HG-- extra : convert_revision : eed3b6a650635d43fe75c2158c8417647af640d9
Diffstat (limited to 'src/mem/physical.cc')
-rw-r--r--src/mem/physical.cc15
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.