Physical memory overrides the tport version of recvFunctional, need to do the
authorRon Dreslinski <rdreslin@umich.edu>
Sun, 12 Nov 2006 14:30:12 +0000 (09:30 -0500)
committerRon Dreslinski <rdreslin@umich.edu>
Sun, 12 Nov 2006 14:30:12 +0000 (09:30 -0500)
check here for responses that match as well

--HG--
extra : convert_revision : 69c3628a381a9da885fab0272abf40c3411a5f0f

src/mem/physical.cc

index 39eb63108007b811b16f4ce3e07209775a6d0289..94f60ad809d5d4771db5f711067c69fa696a369f 100644 (file)
@@ -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.