cache.cc (11271:f4ad5be63ba8) | cache.cc (11275:fc2b0e6550ad) |
---|---|
1/* 2 * Copyright (c) 2010-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 --- 2316 unchanged lines hidden (view full) --- 2325 if (tgt_pkt->cmd == MemCmd::HardPFReq && forwardSnoops) { 2326 // We need to check the caches above us to verify that 2327 // they don't have a copy of this block in the dirty state 2328 // at the moment. Without this check we could get a stale 2329 // copy from memory that might get used in place of the 2330 // dirty one. 2331 Packet snoop_pkt(tgt_pkt, true, false); 2332 snoop_pkt.setExpressSnoop(); | 1/* 2 * Copyright (c) 2010-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 --- 2316 unchanged lines hidden (view full) --- 2325 if (tgt_pkt->cmd == MemCmd::HardPFReq && forwardSnoops) { 2326 // We need to check the caches above us to verify that 2327 // they don't have a copy of this block in the dirty state 2328 // at the moment. Without this check we could get a stale 2329 // copy from memory that might get used in place of the 2330 // dirty one. 2331 Packet snoop_pkt(tgt_pkt, true, false); 2332 snoop_pkt.setExpressSnoop(); |
2333 // We are sending this packet upwards, but if it hits we will 2334 // get a snoop response that we end up treating just like a 2335 // normal response, hence it needs the MSHR as its sender 2336 // state |
|
2333 snoop_pkt.senderState = mshr; 2334 cpuSidePort->sendTimingSnoopReq(&snoop_pkt); 2335 2336 // Check to see if the prefetch was squashed by an upper cache (to 2337 // prevent us from grabbing the line) or if a Check to see if a 2338 // writeback arrived between the time the prefetch was placed in 2339 // the MSHRs and when it was selected to be sent or if the 2340 // prefetch was squashed by an upper cache. --- 53 unchanged lines hidden (view full) --- 2394 pkt = new Packet(tgt_pkt, false, true); 2395 if (pkt->isWrite()) { 2396 pkt->setData(tgt_pkt->getConstPtr<uint8_t>()); 2397 } 2398 } 2399 } 2400 2401 assert(pkt != NULL); | 2337 snoop_pkt.senderState = mshr; 2338 cpuSidePort->sendTimingSnoopReq(&snoop_pkt); 2339 2340 // Check to see if the prefetch was squashed by an upper cache (to 2341 // prevent us from grabbing the line) or if a Check to see if a 2342 // writeback arrived between the time the prefetch was placed in 2343 // the MSHRs and when it was selected to be sent or if the 2344 // prefetch was squashed by an upper cache. --- 53 unchanged lines hidden (view full) --- 2398 pkt = new Packet(tgt_pkt, false, true); 2399 if (pkt->isWrite()) { 2400 pkt->setData(tgt_pkt->getConstPtr<uint8_t>()); 2401 } 2402 } 2403 } 2404 2405 assert(pkt != NULL); |
2402 pkt->senderState = mshr; | 2406 // play it safe and append (rather than set) the sender state, as 2407 // forwarded packets may already have existing state 2408 pkt->pushSenderState(mshr); |
2403 return pkt; 2404} 2405 2406 2407Tick 2408Cache::nextMSHRReadyTime() const 2409{ 2410 Tick nextReady = std::min(mshrQueue.nextMSHRReadyTime(), --- 238 unchanged lines hidden --- | 2409 return pkt; 2410} 2411 2412 2413Tick 2414Cache::nextMSHRReadyTime() const 2415{ 2416 Tick nextReady = std::min(mshrQueue.nextMSHRReadyTime(), --- 238 unchanged lines hidden --- |