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:
parent
c42a7bc4f6
commit
178d114fa5
2 changed files with 2 additions and 0 deletions
1
src/mem/cache/cache_impl.hh
vendored
1
src/mem/cache/cache_impl.hh
vendored
|
@ -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);
|
||||||
|
|
1
src/mem/cache/miss/mshr_queue.cc
vendored
1
src/mem/cache/miss/mshr_queue.cc
vendored
|
@ -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();
|
||||||
|
|
Loading…
Reference in a new issue