diff options
Diffstat (limited to 'src/mem/cache/mshr_queue.cc')
-rw-r--r-- | src/mem/cache/mshr_queue.cc | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/src/mem/cache/mshr_queue.cc b/src/mem/cache/mshr_queue.cc index 3150b4f5d..7bfbb90f5 100644 --- a/src/mem/cache/mshr_queue.cc +++ b/src/mem/cache/mshr_queue.cc @@ -232,6 +232,22 @@ MSHRQueue::markPending(MSHR *mshr) mshr->readyIter = addToReadyList(mshr); } +bool +MSHRQueue::forceDeallocateTarget(MSHR *mshr) +{ + bool was_full = isFull(); + assert(mshr->hasTargets()); + // Pop the prefetch off of the target list + mshr->popTarget(); + // Delete mshr if no remaining targets + if (!mshr->hasTargets() && !mshr->promoteDeferredTargets()) { + deallocateOne(mshr); + } + + // Notify if MSHR queue no longer full + return was_full && !isFull(); +} + void MSHRQueue::squash(int threadNum) { |