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