summaryrefslogtreecommitdiff
path: root/src/mem
diff options
context:
space:
mode:
authorAndreas Hansson <andreas.hansson@arm.com>2013-09-18 08:46:33 -0400
committerAndreas Hansson <andreas.hansson@arm.com>2013-09-18 08:46:33 -0400
commit9aa939891f9d8250dde552638bb03d3f3b6ba268 (patch)
treeb460bd3a218441a480315c2dd31d02c77bb034be /src/mem
parentcecb951f603bd3105a0de0fdf9fefa9780c2f20e (diff)
downloadgem5-9aa939891f9d8250dde552638bb03d3f3b6ba268.tar.xz
mem: Fix scheduling bug in SimpleMemory
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.
Diffstat (limited to 'src/mem')
-rw-r--r--src/mem/simple_mem.cc2
1 files changed, 1 insertions, 1 deletions
diff --git a/src/mem/simple_mem.cc b/src/mem/simple_mem.cc
index 74d5c4ab2..2549cbe39 100644
--- a/src/mem/simple_mem.cc
+++ b/src/mem/simple_mem.cc
@@ -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);