diff options
author | Steve Reinhardt <stever@eecs.umich.edu> | 2007-07-17 08:15:23 -0700 |
---|---|---|
committer | Steve Reinhardt <stever@eecs.umich.edu> | 2007-07-17 08:15:23 -0700 |
commit | a67a0025b3da9605f1cd41c75bff5dba2175a0dd (patch) | |
tree | 99fbe7d42df1a6a1c2c42da18bc8033f56a60461 /src/mem | |
parent | a25f3ac67f9c467cf945b45fbc0f4e587e640cab (diff) | |
download | gem5-a67a0025b3da9605f1cd41c75bff5dba2175a0dd.tar.xz |
Make sure responses never get blocked.
--HG--
extra : convert_revision : 29f359d743994a94dc403aa0621ba72cd137d1a1
Diffstat (limited to 'src/mem')
-rw-r--r-- | src/mem/bus.cc | 6 |
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); |