summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/mem/cache/mshr.cc17
-rw-r--r--src/mem/cache/mshr.hh1
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;