While looking at traces, I discovered some odd behavior with the DMA ports.
After successfully sending a packet, it keeps trying to send it. I
determined that the problem is that even though the DmaPort pops the packet
off the queue, it does not get the new front. This does not typically cause
a problem, because the attempt to send the packet a second time will always
fail, but it doesn't change the fact that it is a bug. It is present from
2.0b5 to the latest unstable. I have included a simple patch below.

   - Clint Smullen

--- io_device.cc  2008-08-25 16:05:51.321310000 -0400
+++ io_device.cc  2008-08-25 17:12:14.139920000 -0400
@@ -190,9 +190,9 @@
 DmaPort::recvRetry()
 {
     assert(transmitList.size());
-    PacketPtr pkt = transmitList.front();
     bool result = true;
     do {
+        PacketPtr pkt = transmitList.front();
         DPRINTF(DMA, "Retry on %s addr %#x\n",
                 pkt->cmdString(), pkt->getAddr());
         result = sendTiming(pkt);
_______________________________________________
m5-dev mailing list
[email protected]
http://m5sim.org/mailman/listinfo/m5-dev

Reply via email to