coherent_xbar.cc (10821:581fb2484bd6) | coherent_xbar.cc (10883:9294c4a60251) |
---|---|
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 --- 124 unchanged lines hidden (view full) --- 133 134 if (snoopPorts.empty()) 135 warn("CoherentXBar %s has no snooping ports attached!\n", name()); 136} 137 138bool 139CoherentXBar::recvTimingReq(PacketPtr pkt, PortID slave_port_id) 140{ | 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 --- 124 unchanged lines hidden (view full) --- 133 134 if (snoopPorts.empty()) 135 warn("CoherentXBar %s has no snooping ports attached!\n", name()); 136} 137 138bool 139CoherentXBar::recvTimingReq(PacketPtr pkt, PortID slave_port_id) 140{ |
141 // @todo temporary hack to deal with memory corruption issue until 142 // 4-phase transactions are complete 143 for (int x = 0; x < pendingDelete.size(); x++) 144 delete pendingDelete[x]; 145 pendingDelete.clear(); 146 |
|
141 // determine the source port based on the id 142 SlavePort *src_port = slavePorts[slave_port_id]; 143 144 // remember if the packet is an express snoop 145 bool is_express_snoop = pkt->isExpressSnoop(); 146 bool is_inhibited = pkt->memInhibitAsserted(); 147 // for normal requests, going downstream, the express snoop flag 148 // and the inhibited flag should always be the same --- 47 unchanged lines hidden (view full) --- 196 pkt->cmdString(), pkt->getAddr(), sf_res.first.size(), 197 sf_res.second); 198 forwardTiming(pkt, slave_port_id, sf_res.first); 199 } else { 200 forwardTiming(pkt, slave_port_id); 201 } 202 } 203 | 147 // determine the source port based on the id 148 SlavePort *src_port = slavePorts[slave_port_id]; 149 150 // remember if the packet is an express snoop 151 bool is_express_snoop = pkt->isExpressSnoop(); 152 bool is_inhibited = pkt->memInhibitAsserted(); 153 // for normal requests, going downstream, the express snoop flag 154 // and the inhibited flag should always be the same --- 47 unchanged lines hidden (view full) --- 202 pkt->cmdString(), pkt->getAddr(), sf_res.first.size(), 203 sf_res.second); 204 forwardTiming(pkt, slave_port_id, sf_res.first); 205 } else { 206 forwardTiming(pkt, slave_port_id); 207 } 208 } 209 |
210 // forwardTiming snooped into peer caches of the sender, and if 211 // this is a clean evict, but the packet is found in a cache, do 212 // not forward it 213 if (pkt->cmd == MemCmd::CleanEvict && pkt->isBlockCached()) { 214 DPRINTF(CoherentXBar, "recvTimingReq: Clean evict 0x%x still cached, " 215 "not forwarding\n", pkt->getAddr()); 216 217 // update the layer state and schedule an idle event 218 reqLayers[master_port_id]->succeededTiming(packetFinishTime); 219 pendingDelete.push_back(pkt); 220 return true; 221 } 222 |
|
204 // remember if the packet will generate a snoop response 205 const bool expect_snoop_resp = !is_inhibited && pkt->memInhibitAsserted(); 206 const bool expect_response = pkt->needsResponse() && 207 !pkt->memInhibitAsserted(); 208 209 // Note: Cannot create a copy of the full packet, here. 210 MemCmd orig_cmd(pkt->cmd); 211 --- 645 unchanged lines hidden --- | 223 // remember if the packet will generate a snoop response 224 const bool expect_snoop_resp = !is_inhibited && pkt->memInhibitAsserted(); 225 const bool expect_response = pkt->needsResponse() && 226 !pkt->memInhibitAsserted(); 227 228 // Note: Cannot create a copy of the full packet, here. 229 MemCmd orig_cmd(pkt->cmd); 230 --- 645 unchanged lines hidden --- |