mem: Fix scheduling bug in SimpleMemory
authorAndreas Hansson <andreas.hansson@arm.com>
Wed, 18 Sep 2013 12:46:33 +0000 (08:46 -0400)
committerAndreas Hansson <andreas.hansson@arm.com>
Wed, 18 Sep 2013 12:46:33 +0000 (08:46 -0400)
This patch ensures that a dequeue event is not scheduled if the memory
controller is waiting for a retry already. Without this check it is
possible for the controller to attempt sending something whilst
already having one packet that is in retry, thus causing the bus to
have an assertion failure.

src/mem/simple_mem.cc

index 74d5c4ab205077ad96090c329b192a7edf49bc50..2549cbe3990a1b2641026aa23d07fcbc45acebdd 100644 (file)
@@ -155,7 +155,7 @@ SimpleMemory::recvTimingReq(PacketPtr pkt)
         // the end even if the latency suggests it should be sent
         // before the packet(s) before it
         packetQueue.push_back(DeferredPacket(pkt, curTick() + getLatency()));
-        if (!dequeueEvent.scheduled())
+        if (!retryResp && !dequeueEvent.scheduled())
             schedule(dequeueEvent, packetQueue.back().tick);
     } else {
         pendingDelete.push_back(pkt);