mshr.cc (10766:b2071d0eb5f1) mshr.cc (10768:9a34e28cd2c2)
1/*
2 * Copyright (c) 2012-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

--- 259 unchanged lines hidden (view full) ---

268}
269
270/*
271 * Adds a target to an MSHR
272 */
273void
274MSHR::allocateTarget(PacketPtr pkt, Tick whenReady, Counter _order)
275{
1/*
2 * Copyright (c) 2012-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

--- 259 unchanged lines hidden (view full) ---

268}
269
270/*
271 * Adds a target to an MSHR
272 */
273void
274MSHR::allocateTarget(PacketPtr pkt, Tick whenReady, Counter _order)
275{
276 // assume we'd never issue a prefetch when we've got an
277 // outstanding miss
278 assert(pkt->cmd != MemCmd::HardPFReq);
279
280 // uncacheable accesses always allocate a new MSHR, and cacheable
281 // accesses ignore any uncacheable MSHRs, thus we should never
282 // have targets addded if originally allocated uncacheable
283 assert(!_isUncacheable);
284
276 // if there's a request already in service for this MSHR, we will
277 // have to defer the new target until after the response if any of
278 // the following are true:
279 // - there are other targets already deferred
280 // - there's a pending invalidate to be applied after the response
281 // comes back (but before this target is processed)
282 // - this target requires an exclusive block and either we're not
283 // getting an exclusive block back or we have already snooped
284 // another read request that will downgrade our exclusive block
285 // to shared
285 // if there's a request already in service for this MSHR, we will
286 // have to defer the new target until after the response if any of
287 // the following are true:
288 // - there are other targets already deferred
289 // - there's a pending invalidate to be applied after the response
290 // comes back (but before this target is processed)
291 // - this target requires an exclusive block and either we're not
292 // getting an exclusive block back or we have already snooped
293 // another read request that will downgrade our exclusive block
294 // to shared
286
287 // assume we'd never issue a prefetch when we've got an
288 // outstanding miss
289 assert(pkt->cmd != MemCmd::HardPFReq);
290
291 if (inService &&
292 (!deferredTargets.empty() || hasPostInvalidate() ||
293 (pkt->needsExclusive() &&
294 (!isPendingDirty() || hasPostDowngrade() || isForward)))) {
295 // need to put on deferred list
296 if (hasPostInvalidate())
297 replaceUpgrade(pkt);
298 deferredTargets.add(pkt, whenReady, _order, Target::FromCPU, true);

--- 185 unchanged lines hidden ---
295 if (inService &&
296 (!deferredTargets.empty() || hasPostInvalidate() ||
297 (pkt->needsExclusive() &&
298 (!isPendingDirty() || hasPostDowngrade() || isForward)))) {
299 // need to put on deferred list
300 if (hasPostInvalidate())
301 replaceUpgrade(pkt);
302 deferredTargets.add(pkt, whenReady, _order, Target::FromCPU, true);

--- 185 unchanged lines hidden ---