snoop_filter.cc (10403:b3231fc8ae9d) | snoop_filter.cc (10821:581fb2484bd6) |
---|---|
1/* 2 * Copyright (c) 2013 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 --- 60 unchanged lines hidden (view full) --- 69 hitSingleRequests++; 70 else 71 hitMultiRequests++; 72 } 73 74 DPRINTF(SnoopFilter, "%s: SF value %x.%x\n", 75 __func__, sf_item.requested, sf_item.holder); 76 | 1/* 2 * Copyright (c) 2013 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 --- 60 unchanged lines hidden (view full) --- 69 hitSingleRequests++; 70 else 71 hitMultiRequests++; 72 } 73 74 DPRINTF(SnoopFilter, "%s: SF value %x.%x\n", 75 __func__, sf_item.requested, sf_item.holder); 76 |
77 if (cpkt->needsResponse()) { | 77 if (!cpkt->req->isUncacheable() && cpkt->needsResponse()) { |
78 if (!cpkt->memInhibitAsserted()) { 79 // Max one request per address per port 80 panic_if(sf_item.requested & req_port, "double request :( "\ 81 "SF value %x.%x\n", sf_item.requested, sf_item.holder); 82 83 // Mark in-flight requests to distinguish later on 84 sf_item.requested |= req_port; 85 } else { --- 13 unchanged lines hidden (view full) --- 99 100void 101SnoopFilter::updateRequest(const Packet* cpkt, const SlavePort& slave_port, 102 bool will_retry) 103{ 104 DPRINTF(SnoopFilter, "%s: packet src %s addr 0x%x cmd %s\n", 105 __func__, slave_port.name(), cpkt->getAddr(), cpkt->cmdString()); 106 | 78 if (!cpkt->memInhibitAsserted()) { 79 // Max one request per address per port 80 panic_if(sf_item.requested & req_port, "double request :( "\ 81 "SF value %x.%x\n", sf_item.requested, sf_item.holder); 82 83 // Mark in-flight requests to distinguish later on 84 sf_item.requested |= req_port; 85 } else { --- 13 unchanged lines hidden (view full) --- 99 100void 101SnoopFilter::updateRequest(const Packet* cpkt, const SlavePort& slave_port, 102 bool will_retry) 103{ 104 DPRINTF(SnoopFilter, "%s: packet src %s addr 0x%x cmd %s\n", 105 __func__, slave_port.name(), cpkt->getAddr(), cpkt->cmdString()); 106 |
107 if (cpkt->req->isUncacheable()) 108 return; 109 |
|
107 Addr line_addr = cpkt->getAddr() & ~(linesize - 1); 108 SnoopMask req_port = portToMask(slave_port); 109 SnoopItem& sf_item = cachedLocations[line_addr]; 110 111 DPRINTF(SnoopFilter, "%s: old SF value %x.%x retry: %i\n", 112 __func__, sf_item.requested, sf_item.holder, will_retry); 113 114 if (will_retry) { --- 75 unchanged lines hidden (view full) --- 190SnoopFilter::updateSnoopResponse(const Packet* cpkt, 191 const SlavePort& rsp_port, 192 const SlavePort& req_port) 193{ 194 DPRINTF(SnoopFilter, "%s: packet rsp %s req %s addr 0x%x cmd %s\n", 195 __func__, rsp_port.name(), req_port.name(), cpkt->getAddr(), 196 cpkt->cmdString()); 197 | 110 Addr line_addr = cpkt->getAddr() & ~(linesize - 1); 111 SnoopMask req_port = portToMask(slave_port); 112 SnoopItem& sf_item = cachedLocations[line_addr]; 113 114 DPRINTF(SnoopFilter, "%s: old SF value %x.%x retry: %i\n", 115 __func__, sf_item.requested, sf_item.holder, will_retry); 116 117 if (will_retry) { --- 75 unchanged lines hidden (view full) --- 193SnoopFilter::updateSnoopResponse(const Packet* cpkt, 194 const SlavePort& rsp_port, 195 const SlavePort& req_port) 196{ 197 DPRINTF(SnoopFilter, "%s: packet rsp %s req %s addr 0x%x cmd %s\n", 198 __func__, rsp_port.name(), req_port.name(), cpkt->getAddr(), 199 cpkt->cmdString()); 200 |
201 assert(cpkt->isResponse()); 202 assert(cpkt->memInhibitAsserted()); 203 204 if (cpkt->req->isUncacheable()) 205 return; 206 |
|
198 Addr line_addr = cpkt->getAddr() & ~(linesize - 1); 199 SnoopMask rsp_mask = portToMask(rsp_port); 200 SnoopMask req_mask = portToMask(req_port); 201 SnoopItem& sf_item = cachedLocations[line_addr]; 202 | 207 Addr line_addr = cpkt->getAddr() & ~(linesize - 1); 208 SnoopMask rsp_mask = portToMask(rsp_port); 209 SnoopMask req_mask = portToMask(req_port); 210 SnoopItem& sf_item = cachedLocations[line_addr]; 211 |
203 assert(cpkt->isResponse()); 204 assert(cpkt->memInhibitAsserted()); 205 | |
206 DPRINTF(SnoopFilter, "%s: old SF value %x.%x\n", 207 __func__, sf_item.requested, sf_item.holder); 208 209 // The source should have the line 210 panic_if(!(sf_item.holder & rsp_mask), "SF value %x.%x does not have "\ 211 "the line\n", sf_item.requested, sf_item.holder); 212 213 // The destination should have had a request in --- 51 unchanged lines hidden (view full) --- 265} 266 267void 268SnoopFilter::updateResponse(const Packet* cpkt, const SlavePort& slave_port) 269{ 270 DPRINTF(SnoopFilter, "%s: packet src %s addr 0x%x cmd %s\n", 271 __func__, slave_port.name(), cpkt->getAddr(), cpkt->cmdString()); 272 | 212 DPRINTF(SnoopFilter, "%s: old SF value %x.%x\n", 213 __func__, sf_item.requested, sf_item.holder); 214 215 // The source should have the line 216 panic_if(!(sf_item.holder & rsp_mask), "SF value %x.%x does not have "\ 217 "the line\n", sf_item.requested, sf_item.holder); 218 219 // The destination should have had a request in --- 51 unchanged lines hidden (view full) --- 271} 272 273void 274SnoopFilter::updateResponse(const Packet* cpkt, const SlavePort& slave_port) 275{ 276 DPRINTF(SnoopFilter, "%s: packet src %s addr 0x%x cmd %s\n", 277 __func__, slave_port.name(), cpkt->getAddr(), cpkt->cmdString()); 278 |
279 assert(cpkt->isResponse()); 280 281 if (cpkt->req->isUncacheable()) 282 return; 283 |
|
273 Addr line_addr = cpkt->getAddr() & ~(linesize - 1); 274 SnoopMask slave_mask = portToMask(slave_port); 275 SnoopItem& sf_item = cachedLocations[line_addr]; 276 | 284 Addr line_addr = cpkt->getAddr() & ~(linesize - 1); 285 SnoopMask slave_mask = portToMask(slave_port); 286 SnoopItem& sf_item = cachedLocations[line_addr]; 287 |
277 assert(cpkt->isResponse()); 278 | |
279 DPRINTF(SnoopFilter, "%s: old SF value %x.%x\n", 280 __func__, sf_item.requested, sf_item.holder); 281 282 // Make sure we have seen the actual request, too 283 panic_if(!(sf_item.requested & slave_mask), "SF value %x.%x missing "\ 284 "request bit\n", sf_item.requested, sf_item.holder); 285 286 // Update the residency of the cache line. --- 45 unchanged lines hidden --- | 288 DPRINTF(SnoopFilter, "%s: old SF value %x.%x\n", 289 __func__, sf_item.requested, sf_item.holder); 290 291 // Make sure we have seen the actual request, too 292 panic_if(!(sf_item.requested & slave_mask), "SF value %x.%x missing "\ 293 "request bit\n", sf_item.requested, sf_item.holder); 294 295 // Update the residency of the cache line. --- 45 unchanged lines hidden --- |