snoop_filter.cc (12334:e0ab29a34764) | snoop_filter.cc (12352:3bddc8785a99) |
---|---|
1/* | 1/* |
2 * Copyright (c) 2013-2016 ARM Limited | 2 * Copyright (c) 2013-2017 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 9 * licensed hereunder. You may use the software subject to the license 10 * terms below provided that you ensure that this notice is replicated --- 199 unchanged lines hidden (view full) --- 210 if (isPow2(interested)) 211 hitSingleSnoops++; 212 else 213 hitMultiSnoops++; 214 215 // ReadEx and Writes require both invalidation and exlusivity, while reads 216 // require neither. Writebacks on the other hand require exclusivity but 217 // not the invalidation. Previously Writebacks did not generate upward | 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 9 * licensed hereunder. You may use the software subject to the license 10 * terms below provided that you ensure that this notice is replicated --- 199 unchanged lines hidden (view full) --- 210 if (isPow2(interested)) 211 hitSingleSnoops++; 212 else 213 hitMultiSnoops++; 214 215 // ReadEx and Writes require both invalidation and exlusivity, while reads 216 // require neither. Writebacks on the other hand require exclusivity but 217 // not the invalidation. Previously Writebacks did not generate upward |
218 // snoops so this was never an aissue. Now that Writebacks generate snoops 219 // we need to special case for Writebacks. | 218 // snoops so this was never an issue. Now that Writebacks generate snoops 219 // we need a special case for Writebacks. Additionally cache maintenance 220 // operations can generate snoops as they clean and/or invalidate all 221 // caches down to the specified point of reference. |
220 assert(cpkt->isWriteback() || cpkt->req->isUncacheable() || | 222 assert(cpkt->isWriteback() || cpkt->req->isUncacheable() || |
221 (cpkt->isInvalidate() == cpkt->needsWritable())); | 223 (cpkt->isInvalidate() == cpkt->needsWritable()) || 224 cpkt->req->isCacheMaintenance()); |
222 if (cpkt->isInvalidate() && !sf_item.requested) { 223 // Early clear of the holder, if no other request is currently going on 224 // @todo: This should possibly be updated even though we do not filter 225 // upward snoops 226 sf_item.holder = 0; 227 } 228 229 eraseIfNullEntry(sf_it); --- 179 unchanged lines hidden --- | 225 if (cpkt->isInvalidate() && !sf_item.requested) { 226 // Early clear of the holder, if no other request is currently going on 227 // @todo: This should possibly be updated even though we do not filter 228 // upward snoops 229 sf_item.holder = 0; 230 } 231 232 eraseIfNullEntry(sf_it); --- 179 unchanged lines hidden --- |