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 ---