mem: Avoid unnecessary snoops on writebacks and clean evictions

This patch optimises the handling of writebacks and clean evictions
when using a snoop filter. Instead of snooping into the caches to
determine if the block is cached or not, simply set the status based
on the snoop-filter result.
This commit is contained in:
Ali Jafri 2015-11-06 03:26:40 -05:00
parent c086c20bd2
commit f02a9338c1

View file

@ -198,7 +198,18 @@ CoherentXBar::recvTimingReq(PacketPtr pkt, PortID slave_port_id)
" SF size: %i lat: %i\n", src_port->name(),
pkt->cmdString(), pkt->getAddr(), sf_res.first.size(),
sf_res.second);
forwardTiming(pkt, slave_port_id, sf_res.first);
if (pkt->evictingBlock()) {
// for block-evicting packets, i.e. writebacks and
// clean evictions, there is no need to snoop up, as
// all we do is determine if the block is cached or
// not, instead just set it here based on the snoop
// filter result
if (!sf_res.first.empty())
pkt->setBlockCached();
} else {
forwardTiming(pkt, slave_port_id, sf_res.first);
}
} else {
forwardTiming(pkt, slave_port_id);
}