diff options
author | Ali Saidi <saidi@eecs.umich.edu> | 2006-10-12 15:02:50 -0400 |
---|---|---|
committer | Ali Saidi <saidi@eecs.umich.edu> | 2006-10-12 15:02:50 -0400 |
commit | 4a96779350c6f246f7244daf8be7dbceffbadc8f (patch) | |
tree | b8eff2a6331fe6416a8ed1ef0f546f1211ef4b79 /src | |
parent | 1ebe4b0dec40fd3d58aa55c38a0fcbf212ebda85 (diff) | |
parent | 0615d92d33ffc2c47b95caeebf3a49c4626fe681 (diff) | |
download | gem5-4a96779350c6f246f7244daf8be7dbceffbadc8f.tar.xz |
Merge zizzer:/bk/newmem
into zeep.pool:/z/saidi/work/m5.newmem.head
--HG--
extra : convert_revision : 0e184a0784100112db5841c587bd3dd638f8bdc0
Diffstat (limited to 'src')
-rw-r--r-- | src/mem/bus.cc | 7 |
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.*/ |