Force prefetches to check cache and MSHRs immediately prior to issue.

This prevents redundant prefetches from being issued, solving the
occasional 'needsExclusive && !blk->isWritable()' assertion failure
in cache_impl.hh that several people have run into.
Eliminates "prefetch_cache_check_push" flag, neither setting of
which really solved the problem.
This commit is contained in:
Steve Reinhardt
2009-09-26 10:50:50 -07:00
parent f28ea7a6c9
commit 72cfed4164
4 changed files with 8 additions and 27 deletions

View File

@@ -1301,11 +1301,14 @@ Cache<TagStore>::getNextMSHR()
// If we have a miss queue slot, we can try a prefetch
PacketPtr pkt = prefetcher->getPacket();
if (pkt) {
// Update statistic on number of prefetches issued
// (hwpf_mshr_misses)
mshr_misses[pkt->cmdToIndex()][0/*pkt->req->threadId()*/]++;
// Don't request bus, since we already have it
return allocateMissBuffer(pkt, curTick, false);
Addr pf_addr = blockAlign(pkt->getAddr());
if (!tags->findBlock(pf_addr) && !mshrQueue.findMatch(pf_addr)) {
// Update statistic on number of prefetches issued
// (hwpf_mshr_misses)
mshr_misses[pkt->cmdToIndex()][0/*pkt->req->threadId()*/]++;
// Don't request bus, since we already have it
return allocateMissBuffer(pkt, curTick, false);
}
}
}