cache.cc (12346:9b1144d046ca) cache.cc (12348:bef2d9d3c353)
1/*
1/*
2 * Copyright (c) 2010-2016 ARM Limited
2 * Copyright (c) 2010-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

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

1331 }
1332
1333 bool wasFull = mshrQueue.isFull();
1334
1335 PacketList writebacks;
1336
1337 Tick forward_time = clockEdge(forwardLatency) + pkt->headerDelay;
1338
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

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

1331 }
1332
1333 bool wasFull = mshrQueue.isFull();
1334
1335 PacketList writebacks;
1336
1337 Tick forward_time = clockEdge(forwardLatency) + pkt->headerDelay;
1338
1339 // upgrade deferred targets if the response has no sharers, and is
1340 // thus passing writable
1341 if (!pkt->hasSharers()) {
1342 mshr->promoteWritable();
1343 }
1344
1345 bool is_fill = !mshr->isForward &&
1346 (pkt->isRead() || pkt->cmd == MemCmd::UpgradeResp);
1347
1348 CacheBlk *blk = tags->findBlock(pkt->getAddr(), pkt->isSecure());
1339 bool is_fill = !mshr->isForward &&
1340 (pkt->isRead() || pkt->cmd == MemCmd::UpgradeResp);
1341
1342 CacheBlk *blk = tags->findBlock(pkt->getAddr(), pkt->isSecure());
1343 const bool valid_blk = blk && blk->isValid();
1344 // If the response indicates that there are no sharers and we
1345 // either had the block already or the response is filling we can
1346 // promote our copy to writable
1347 if (!pkt->hasSharers() && (is_fill || valid_blk)) {
1348 mshr->promoteWritable();
1349 }
1349
1350 if (is_fill && !is_error) {
1351 DPRINTF(Cache, "Block for addr %#llx being updated in Cache\n",
1352 pkt->getAddr());
1353
1354 blk = handleFill(pkt, blk, writebacks, mshr->allocOnFill());
1355 assert(blk != nullptr);
1356 }

--- 1407 unchanged lines hidden ---
1350
1351 if (is_fill && !is_error) {
1352 DPRINTF(Cache, "Block for addr %#llx being updated in Cache\n",
1353 pkt->getAddr());
1354
1355 blk = handleFill(pkt, blk, writebacks, mshr->allocOnFill());
1356 assert(blk != nullptr);
1357 }

--- 1407 unchanged lines hidden ---