Prefetch: Don't prefetch if address is in the write queue.
Check that we're not currently writing back an address the prefetcher is trying to prefetch before issuing it. We previously checked the mshrQueue and the cache itself, but forgot to check the writeBuffer. This fixes a memory corrucption issue with an L2 prefetcher.
This commit is contained in:
parent
e4830ad2eb
commit
0c29a97ba9
1 changed files with 2 additions and 1 deletions
3
src/mem/cache/cache_impl.hh
vendored
3
src/mem/cache/cache_impl.hh
vendored
|
@ -1437,7 +1437,8 @@ Cache<TagStore>::getNextMSHR()
|
|||
PacketPtr pkt = prefetcher->getPacket();
|
||||
if (pkt) {
|
||||
Addr pf_addr = blockAlign(pkt->getAddr());
|
||||
if (!tags->findBlock(pf_addr) && !mshrQueue.findMatch(pf_addr)) {
|
||||
if (!tags->findBlock(pf_addr) && !mshrQueue.findMatch(pf_addr) &&
|
||||
!writeBuffer.findMatch(pf_addr)) {
|
||||
// Update statistic on number of prefetches issued
|
||||
// (hwpf_mshr_misses)
|
||||
mshr_misses[pkt->cmdToIndex()][0/*pkt->req->threadId()*/]++;
|
||||
|
|
Loading…
Reference in a new issue