From: Ali Saidi Date: Thu, 12 Oct 2006 19:02:25 +0000 (-0400) Subject: small bus updates for functional accesses X-Git-Tag: m5_2.0_beta2~73^2~23^2 X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=0615d92d33ffc2c47b95caeebf3a49c4626fe681;p=gem5.git small bus updates for functional accesses --HG-- extra : convert_revision : c7a6b199c74ed4b4ffab14bbffb51e72d75b7742 --- diff --git a/src/mem/bus.cc b/src/mem/bus.cc index 75ffed0d2..b11b6de58 100644 --- a/src/mem/bus.cc +++ b/src/mem/bus.cc @@ -320,7 +320,7 @@ Bus::functionalSnoop(Packet *pkt) { std::vector ports = findSnoopPorts(pkt->getAddr(), pkt->getSrc()); - while (!ports.empty()) + while (!ports.empty() && pkt->result != Packet::Success) { interfaces[ports.back()]->sendFunctional(pkt); ports.pop_back(); @@ -367,7 +367,10 @@ Bus::recvFunctional(Packet *pkt) pkt->getSrc(), pkt->getDest(), pkt->getAddr(), pkt->cmdString()); assert(pkt->getDest() == Packet::Broadcast); functionalSnoop(pkt); - findPort(pkt->getAddr(), pkt->getSrc())->sendFunctional(pkt); + + // If the snooping found what we were looking for, we're done. + if (pkt->result != Packet::Success) + findPort(pkt->getAddr(), pkt->getSrc())->sendFunctional(pkt); } /** Function called by the port when the bus is receiving a status change.*/