summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAli Saidi <saidi@eecs.umich.edu>2006-10-12 15:02:25 -0400
committerAli Saidi <saidi@eecs.umich.edu>2006-10-12 15:02:25 -0400
commit0615d92d33ffc2c47b95caeebf3a49c4626fe681 (patch)
treec07d486505b161ee6f3e1071e577a68f9a6560c4 /src
parent2c9d506f46141ebc9dfef810babdb0b2031d10c1 (diff)
downloadgem5-0615d92d33ffc2c47b95caeebf3a49c4626fe681.tar.xz
small bus updates for functional accesses
--HG-- extra : convert_revision : c7a6b199c74ed4b4ffab14bbffb51e72d75b7742
Diffstat (limited to 'src')
-rw-r--r--src/mem/bus.cc7
1 files changed, 5 insertions, 2 deletions
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<int> 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.*/