coherent_xbar.cc (11196:53d4f7e452d6) | coherent_xbar.cc (11199:929fd978ab4e) |
---|---|
1/* 2 * Copyright (c) 2011-2015 ARM Limited 3 * All rights reserved 4 * 5 * The license below extends only to copyright in the software and shall 6 * not be construed as granting a license to any other intellectual 7 * property including but not limited to intellectual property relating 8 * to a hardware implementation of the functionality of the software --- 185 unchanged lines hidden (view full) --- 194 // the xbar has to be charged also with to lookup latency 195 // of the snoop filter 196 pkt->headerDelay += sf_res.second * clockPeriod(); 197 DPRINTF(CoherentXBar, "recvTimingReq: src %s %s 0x%x"\ 198 " SF size: %i lat: %i\n", src_port->name(), 199 pkt->cmdString(), pkt->getAddr(), sf_res.first.size(), 200 sf_res.second); 201 | 1/* 2 * Copyright (c) 2011-2015 ARM Limited 3 * All rights reserved 4 * 5 * The license below extends only to copyright in the software and shall 6 * not be construed as granting a license to any other intellectual 7 * property including but not limited to intellectual property relating 8 * to a hardware implementation of the functionality of the software --- 185 unchanged lines hidden (view full) --- 194 // the xbar has to be charged also with to lookup latency 195 // of the snoop filter 196 pkt->headerDelay += sf_res.second * clockPeriod(); 197 DPRINTF(CoherentXBar, "recvTimingReq: src %s %s 0x%x"\ 198 " SF size: %i lat: %i\n", src_port->name(), 199 pkt->cmdString(), pkt->getAddr(), sf_res.first.size(), 200 sf_res.second); 201 |
202 if (pkt->evictingBlock()) { | 202 if (pkt->isEviction()) { |
203 // for block-evicting packets, i.e. writebacks and 204 // clean evictions, there is no need to snoop up, as 205 // all we do is determine if the block is cached or 206 // not, instead just set it here based on the snoop 207 // filter result 208 if (!sf_res.first.empty()) 209 pkt->setBlockCached(); 210 } else { --- 4 unchanged lines hidden (view full) --- 215 } 216 217 // add the snoop delay to our header delay, and then reset it 218 pkt->headerDelay += pkt->snoopDelay; 219 pkt->snoopDelay = 0; 220 } 221 222 // forwardTiming snooped into peer caches of the sender, and if | 203 // for block-evicting packets, i.e. writebacks and 204 // clean evictions, there is no need to snoop up, as 205 // all we do is determine if the block is cached or 206 // not, instead just set it here based on the snoop 207 // filter result 208 if (!sf_res.first.empty()) 209 pkt->setBlockCached(); 210 } else { --- 4 unchanged lines hidden (view full) --- 215 } 216 217 // add the snoop delay to our header delay, and then reset it 218 pkt->headerDelay += pkt->snoopDelay; 219 pkt->snoopDelay = 0; 220 } 221 222 // forwardTiming snooped into peer caches of the sender, and if |
223 // this is a clean evict, but the packet is found in a cache, do 224 // not forward it 225 if (pkt->cmd == MemCmd::CleanEvict && pkt->isBlockCached()) { 226 DPRINTF(CoherentXBar, "recvTimingReq: Clean evict 0x%x still cached, " | 223 // this is a clean evict or clean writeback, but the packet is 224 // found in a cache, do not forward it 225 if ((pkt->cmd == MemCmd::CleanEvict || 226 pkt->cmd == MemCmd::WritebackClean) && pkt->isBlockCached()) { 227 DPRINTF(CoherentXBar, "Clean evict/writeback %#llx still cached, " |
227 "not forwarding\n", pkt->getAddr()); 228 229 // update the layer state and schedule an idle event 230 reqLayers[master_port_id]->succeededTiming(packetFinishTime); 231 232 // queue the packet for deletion 233 pendingDelete.reset(pkt); 234 --- 394 unchanged lines hidden (view full) --- 629 } 630 snoop_response_cmd = snoop_result.first; 631 snoop_response_latency += snoop_result.second; 632 } 633 634 // forwardAtomic snooped into peer caches of the sender, and if 635 // this is a clean evict, but the packet is found in a cache, do 636 // not forward it | 228 "not forwarding\n", pkt->getAddr()); 229 230 // update the layer state and schedule an idle event 231 reqLayers[master_port_id]->succeededTiming(packetFinishTime); 232 233 // queue the packet for deletion 234 pendingDelete.reset(pkt); 235 --- 394 unchanged lines hidden (view full) --- 630 } 631 snoop_response_cmd = snoop_result.first; 632 snoop_response_latency += snoop_result.second; 633 } 634 635 // forwardAtomic snooped into peer caches of the sender, and if 636 // this is a clean evict, but the packet is found in a cache, do 637 // not forward it |
637 if (pkt->cmd == MemCmd::CleanEvict && pkt->isBlockCached()) { 638 DPRINTF(CoherentXBar, "recvAtomic: Clean evict 0x%x still cached, " | 638 if ((pkt->cmd == MemCmd::CleanEvict || 639 pkt->cmd == MemCmd::WritebackClean) && pkt->isBlockCached()) { 640 DPRINTF(CoherentXBar, "Clean evict/writeback %#llx still cached, " |
639 "not forwarding\n", pkt->getAddr()); 640 return 0; 641 } 642 643 // even if we had a snoop response, we must continue and also 644 // perform the actual request at the destination 645 PortID master_port_id = findPort(pkt->getAddr()); 646 --- 259 unchanged lines hidden --- | 641 "not forwarding\n", pkt->getAddr()); 642 return 0; 643 } 644 645 // even if we had a snoop response, we must continue and also 646 // perform the actual request at the destination 647 PortID master_port_id = findPort(pkt->getAddr()); 648 --- 259 unchanged lines hidden --- |