diff options
-rw-r--r-- | src/mem/cache/mshr.cc | 17 | ||||
-rw-r--r-- | src/mem/cache/mshr.hh | 1 |
2 files changed, 13 insertions, 5 deletions
diff --git a/src/mem/cache/mshr.cc b/src/mem/cache/mshr.cc index 21ce8a36d..d6208dde9 100644 --- a/src/mem/cache/mshr.cc +++ b/src/mem/cache/mshr.cc @@ -179,25 +179,32 @@ MSHR::TargetList::replaceUpgrades() void -MSHR::TargetList::clearDownstreamPending() +MSHR::TargetList::clearDownstreamPending(MSHR::TargetList::iterator begin, + MSHR::TargetList::iterator end) { - for (auto& t : *this) { - if (t.markedPending) { + for (auto t = begin; t != end; t++) { + if (t->markedPending) { // Iterate over the SenderState stack and see if we find // an MSHR entry. If we find one, clear the // downstreamPending flag by calling // clearDownstreamPending(). This recursively clears the // downstreamPending flag in all caches this packet has // passed through. - MSHR *mshr = t.pkt->findNextSenderState<MSHR>(); + MSHR *mshr = t->pkt->findNextSenderState<MSHR>(); if (mshr != nullptr) { mshr->clearDownstreamPending(); } - t.markedPending = false; + t->markedPending = false; } } } +void +MSHR::TargetList::clearDownstreamPending() +{ + clearDownstreamPending(begin(), end()); +} + bool MSHR::TargetList::checkFunctional(PacketPtr pkt) diff --git a/src/mem/cache/mshr.hh b/src/mem/cache/mshr.hh index 5c5a9e8d1..f93d3c0f5 100644 --- a/src/mem/cache/mshr.hh +++ b/src/mem/cache/mshr.hh @@ -234,6 +234,7 @@ class MSHR : public QueueEntry, public Printable void replaceUpgrades(); void clearDownstreamPending(); + void clearDownstreamPending(iterator begin, iterator end); bool checkFunctional(PacketPtr pkt); void print(std::ostream &os, int verbosity, const std::string &prefix) const; |