summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSteve Reinhardt <stever@eecs.umich.edu>2007-07-17 08:15:23 -0700
committerSteve Reinhardt <stever@eecs.umich.edu>2007-07-17 08:15:23 -0700
commita67a0025b3da9605f1cd41c75bff5dba2175a0dd (patch)
tree99fbe7d42df1a6a1c2c42da18bc8033f56a60461
parenta25f3ac67f9c467cf945b45fbc0f4e587e640cab (diff)
downloadgem5-a67a0025b3da9605f1cd41c75bff5dba2175a0dd.tar.xz
Make sure responses never get blocked.
--HG-- extra : convert_revision : 29f359d743994a94dc403aa0621ba72cd137d1a1
-rw-r--r--src/mem/bus.cc6
1 files changed, 3 insertions, 3 deletions
diff --git a/src/mem/bus.cc b/src/mem/bus.cc
index e70558bd6..da8df06ea 100644
--- a/src/mem/bus.cc
+++ b/src/mem/bus.cc
@@ -183,7 +183,7 @@ Bus::recvTiming(PacketPtr pkt)
// If the bus is busy, or other devices are in line ahead of the current
// one, put this device on the retry list.
- if (!pkt->isExpressSnoop() &&
+ if (!(pkt->isResponse() || pkt->isExpressSnoop()) &&
(tickNextIdle > curTick ||
(retryList.size() && (!inRetry || pktPort != retryList.front()))))
{
@@ -194,8 +194,6 @@ Bus::recvTiming(PacketPtr pkt)
short dest = pkt->getDest();
- // Make sure to clear the snoop commit flag so it doesn't think an
- // access has been handled twice.
if (dest == Packet::Broadcast) {
port_id = findPort(pkt->getAddr());
timingSnoop(pkt, interfaces[port_id]);
@@ -234,6 +232,8 @@ Bus::recvTiming(PacketPtr pkt)
}
// Packet not successfully sent. Leave or put it on the retry list.
+ // illegal to block responses... can lead to deadlock
+ assert(!pkt->isResponse());
DPRINTF(Bus, "Adding2 a retry to RETRY list %d\n",
pktPort->getId());
addToRetryList(pktPort);