coherent_xbar.cc (11127:f39c2cc0d44e) | coherent_xbar.cc (11129:48c02e8b0bbb) |
---|---|
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 --- 216 unchanged lines hidden (view full) --- 225 return true; 226 } 227 228 // remember if the packet will generate a snoop response 229 const bool expect_snoop_resp = !is_inhibited && pkt->memInhibitAsserted(); 230 const bool expect_response = pkt->needsResponse() && 231 !pkt->memInhibitAsserted(); 232 | 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 --- 216 unchanged lines hidden (view full) --- 225 return true; 226 } 227 228 // remember if the packet will generate a snoop response 229 const bool expect_snoop_resp = !is_inhibited && pkt->memInhibitAsserted(); 230 const bool expect_response = pkt->needsResponse() && 231 !pkt->memInhibitAsserted(); 232 |
233 // Note: Cannot create a copy of the full packet, here. 234 MemCmd orig_cmd(pkt->cmd); 235 | |
236 // since it is a normal request, attempt to send the packet 237 bool success = masterPorts[master_port_id]->sendTimingReq(pkt); 238 239 if (snoopFilter && !system->bypassCaches()) { | 233 // since it is a normal request, attempt to send the packet 234 bool success = masterPorts[master_port_id]->sendTimingReq(pkt); 235 236 if (snoopFilter && !system->bypassCaches()) { |
240 // The packet may already be overwritten by the sendTimingReq function. 241 // The snoop filter needs to see the original request *and* the return 242 // status of the send operation, so we need to recreate the original 243 // request. Atomic mode does not have the issue, as there the send 244 // operation and the response happen instantaneously and don't need two 245 // phase tracking. 246 MemCmd tmp_cmd(pkt->cmd); 247 pkt->cmd = orig_cmd; | |
248 // Let the snoop filter know about the success of the send operation 249 snoopFilter->updateRequest(pkt, *src_port, !success); | 237 // Let the snoop filter know about the success of the send operation 238 snoopFilter->updateRequest(pkt, *src_port, !success); |
250 pkt->cmd = tmp_cmd; | |
251 } 252 253 // check if we were successful in sending the packet onwards 254 if (!success) { 255 // express snoops and inhibited packets should never be forced 256 // to retry 257 assert(!is_express_snoop); 258 assert(!pkt->memInhibitAsserted()); --- 625 unchanged lines hidden --- | 239 } 240 241 // check if we were successful in sending the packet onwards 242 if (!success) { 243 // express snoops and inhibited packets should never be forced 244 // to retry 245 assert(!is_express_snoop); 246 assert(!pkt->memInhibitAsserted()); --- 625 unchanged lines hidden --- |