1/* 2 * Copyright (c) 2013-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 --- 243 unchanged lines hidden (view full) --- 252 // The source should have the line 253 panic_if(!(sf_item.holder & rsp_mask), "SF value %x.%x does not have "\ 254 "the line\n", sf_item.requested, sf_item.holder); 255 256 // The destination should have had a request in 257 panic_if(!(sf_item.requested & req_mask), "SF value %x.%x missing "\ 258 "the original request\n", sf_item.requested, sf_item.holder); 259 |
260 // If the snoop response has no sharers the line is passed in 261 // Modified state, and we know that there are no other copies, or 262 // they will all be invalidated imminently 263 if (!cpkt->hasSharers()) { 264 DPRINTF(SnoopFilter, 265 "%s: dropping %x because non-shared snoop " 266 "response SF val: %x.%x\n", __func__, rsp_mask, |
267 sf_item.requested, sf_item.holder); |
268 sf_item.holder = 0; 269 } 270 assert(!cpkt->isWriteback()); 271 sf_item.holder |= req_mask; 272 sf_item.requested &= ~req_mask; 273 assert(sf_item.requested | sf_item.holder); 274 DPRINTF(SnoopFilter, "%s: new SF value %x.%x\n", 275 __func__, sf_item.requested, sf_item.holder); --- 18 unchanged lines hidden (view full) --- 294 if (!is_hit) 295 return; 296 297 SnoopItem& sf_item = sf_it->second; 298 299 DPRINTF(SnoopFilter, "%s: old SF value %x.%x\n", 300 __func__, sf_item.requested, sf_item.holder); 301 |
302 // If the snoop response has no sharers the line is passed in 303 // Modified state, and we know that there are no other copies, or 304 // they will all be invalidated imminently 305 if (!cpkt->hasSharers()) { |
306 sf_item.holder = 0; 307 } 308 DPRINTF(SnoopFilter, "%s: new SF value %x.%x\n", 309 __func__, sf_item.requested, sf_item.holder); 310 eraseIfNullEntry(sf_it); 311 312} 313 --- 17 unchanged lines hidden (view full) --- 331 332 DPRINTF(SnoopFilter, "%s: old SF value %x.%x\n", 333 __func__, sf_item.requested, sf_item.holder); 334 335 // Make sure we have seen the actual request, too 336 panic_if(!(sf_item.requested & slave_mask), "SF value %x.%x missing "\ 337 "request bit\n", sf_item.requested, sf_item.holder); 338 |
339 // Update the residency of the cache line. If the response has no 340 // sharers we know that the line has been invalidated in all 341 // branches that are not where we are responding to. 342 if (!cpkt->hasSharers()) |
343 sf_item.holder = 0; 344 sf_item.holder |= slave_mask; 345 sf_item.requested &= ~slave_mask; 346 assert(sf_item.holder | sf_item.requested); 347 DPRINTF(SnoopFilter, "%s: new SF value %x.%x\n", 348 __func__, sf_item.requested, sf_item.holder); 349} 350 --- 37 unchanged lines hidden --- |