Minor fixes for full-system timing memory.
authorSteve Reinhardt <stever@eecs.umich.edu>
Tue, 23 May 2006 21:16:45 +0000 (17:16 -0400)
committerSteve Reinhardt <stever@eecs.umich.edu>
Tue, 23 May 2006 21:16:45 +0000 (17:16 -0400)
Need to rewrite bus bridge to get any further.

src/dev/io_device.cc:
    Set packet dest on timing responses.
src/mem/bus.cc:
    Fix dest addr bounds check assertion.
    Add assertion to catch infinite loopbacks.
src/mem/physical.cc:
    Add comment.

--HG--
extra : convert_revision : 419b65a3a61e2d099884dbda117b338dffd80896

src/dev/io_device.cc
src/mem/bus.cc
src/mem/physical.cc

index 634b11b7e971033ffa330a42fe5cf47324cb811b..5f7770a92a4ef11e92b6f9ba64d5556661bab7fd 100644 (file)
@@ -78,6 +78,8 @@ bool
 PioPort::recvTiming(Packet *pkt)
 {
     device->recvAtomic(pkt);
+    // turn packet around to go back to requester
+    pkt->dest = pkt->src;
     sendTiming(pkt, pkt->time - pkt->req->getTime());
     return Success;
 }
index f7c2b874ac0f272e9beb3fc1920aeb823e0eb7d3..e8dfbc2e6495370625a9400d557566a357f0c27d 100644 (file)
@@ -54,7 +54,8 @@ Bus::recvTiming(Packet *pkt)
     if (pkt->dest == Packet::Broadcast) {
         port = findPort(pkt->addr, pkt->src);
     } else {
-        assert(pkt->dest > 0 && pkt->dest < interfaces.size());
+        assert(pkt->dest >= 0 && pkt->dest < interfaces.size());
+        assert(pkt->dest != pkt->src); // catch infinite loops
         port = interfaces[pkt->dest];
     }
     return port->sendTiming(pkt);
index bc250067865443906a34d1d7d9c2f838c8eddfbd..75179f9e3b156d113a0b2e540fca813356e28687 100644 (file)
@@ -127,6 +127,7 @@ PhysicalMemory::doTimingAccess (Packet *pkt, MemoryPort* memoryPort)
 {
     doFunctionalAccess(pkt);
 
+    // turn packet around to go back to requester
     pkt->dest = pkt->src;
     MemResponseEvent* response = new MemResponseEvent(pkt, memoryPort);
     response->schedule(curTick + lat);