mem: Check the XBar's port queues on functional snoops

The CoherentXBar currently doesn't check its queued slave ports when
receiving a functional snoop. This caused data corruption in cases
when a modified cache lines is forwarded between two caches.

Add the required functional calls into the queued slave ports.
This commit is contained in:
Andreas Sandberg 2015-11-06 03:26:09 -05:00
parent 6433a10749
commit 3747e178ed

View file

@ -832,6 +832,14 @@ CoherentXBar::recvFunctionalSnoop(PacketPtr pkt, PortID master_port_id)
pkt->cmdString());
}
for (const auto& p : slavePorts) {
if (p->checkFunctional(pkt)) {
if (pkt->needsResponse())
pkt->makeResponse();
return;
}
}
// forward to all snoopers
forwardFunctional(pkt, InvalidPortID);
}