Make sure responses never get blocked.

--HG--
extra : convert_revision : 29f359d743994a94dc403aa0621ba72cd137d1a1
This commit is contained in:
Steve Reinhardt
2007-07-17 08:15:23 -07:00
parent a25f3ac67f
commit a67a0025b3

View File

@@ -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);