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:
parent
6433a10749
commit
3747e178ed
1 changed files with 8 additions and 0 deletions
|
@ -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);
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue