From: Steve Reinhardt Date: Tue, 17 Jul 2007 15:15:23 +0000 (-0700) Subject: Make sure responses never get blocked. X-Git-Tag: m5_2.0_beta4~195^2~45 X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=a67a0025b3da9605f1cd41c75bff5dba2175a0dd;p=gem5.git Make sure responses never get blocked. --HG-- extra : convert_revision : 29f359d743994a94dc403aa0621ba72cd137d1a1 --- 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);