Fix infinite writebacks bug in cache.

src/mem/cache/cache_impl.hh:
    Make sure to pop the list.  Fixes infinite writeback bug.
src/mem/cache/miss/mshr_queue.cc:
    Add an assert as sanity check in case .full() stops working again.

--HG--
extra : convert_revision : d847e49a397eeb0b7c5ac060fcfc3eaeac921311
This commit is contained in:
Ron Dreslinski 2006-10-07 11:36:55 -04:00
parent c42a7bc4f6
commit 178d114fa5
2 changed files with 2 additions and 0 deletions

View file

@ -326,6 +326,7 @@ Cache<TagStore,Buffering,Coherence>::handleResponse(Packet * &pkt)
writebacks, pkt); writebacks, pkt);
while (!writebacks.empty()) { while (!writebacks.empty()) {
missQueue->doWriteback(writebacks.front()); missQueue->doWriteback(writebacks.front());
writebacks.pop_front();
} }
} }
missQueue->handleResponse(pkt, curTick + hitLatency); missQueue->handleResponse(pkt, curTick + hitLatency);

View file

@ -128,6 +128,7 @@ MSHR*
MSHRQueue::allocate(Packet * &pkt, int size) MSHRQueue::allocate(Packet * &pkt, int size)
{ {
Addr aligned_addr = pkt->getAddr() & ~((Addr)size - 1); Addr aligned_addr = pkt->getAddr() & ~((Addr)size - 1);
assert(!freeList.empty());
MSHR *mshr = freeList.front(); MSHR *mshr = freeList.front();
assert(mshr->getNumTargets() == 0); assert(mshr->getNumTargets() == 0);
freeList.pop_front(); freeList.pop_front();