diff options
author | Nikos Nikoleris <nikos.nikoleris@arm.com> | 2018-05-02 14:41:22 +0100 |
---|---|---|
committer | Nikos Nikoleris <nikos.nikoleris@arm.com> | 2018-05-30 13:08:55 +0000 |
commit | 8100fb5f19b09a93c1f3e3e8533322e1fa73e6d3 (patch) | |
tree | 5d0450c632ea767afc5939b0382fe479e2bf86a7 /src/mem/cache/mshr.cc | |
parent | f94f70237dfaac86c83dfbb7cb24e6a821b867eb (diff) | |
download | gem5-8100fb5f19b09a93c1f3e3e8533322e1fa73e6d3.tar.xz |
mem-cache: Determine if an MSHR has requests from another cache
To decide whether we allocate upon receiving a response we need to
determine if any of the currently serviced requests (non-deferred
targets) is comming from another cache. This change adds support for
tracking this information in the MSHR.
Change-Id: If1db93c12b6af5813b91b9d6b6e5e196d327f038
Reviewed-on: https://gem5-review.googlesource.com/10422
Reviewed-by: Jason Lowe-Power <jason@lowepower.com>
Maintainer: Nikos Nikoleris <nikos.nikoleris@arm.com>
Diffstat (limited to 'src/mem/cache/mshr.cc')
-rw-r--r-- | src/mem/cache/mshr.cc | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/src/mem/cache/mshr.cc b/src/mem/cache/mshr.cc index cc26b5651..4f170e6b3 100644 --- a/src/mem/cache/mshr.cc +++ b/src/mem/cache/mshr.cc @@ -68,7 +68,8 @@ MSHR::MSHR() : downstreamPending(false), } MSHR::TargetList::TargetList() - : needsWritable(false), hasUpgrade(false), allocOnFill(false) + : needsWritable(false), hasUpgrade(false), allocOnFill(false), + hasFromCache(false) {} @@ -91,6 +92,10 @@ MSHR::TargetList::updateFlags(PacketPtr pkt, Target::Source source, // potentially re-evaluate whether we should allocate on a fill or // not allocOnFill = allocOnFill || alloc_on_fill; + + if (source != Target::FromPrefetcher) { + hasFromCache = hasFromCache || pkt->fromCache(); + } } } @@ -590,7 +595,7 @@ MSHR::sendPacket(Cache &cache) void MSHR::print(std::ostream &os, int verbosity, const std::string &prefix) const { - ccprintf(os, "%s[%#llx:%#llx](%s) %s %s %s state: %s %s %s %s %s\n", + ccprintf(os, "%s[%#llx:%#llx](%s) %s %s %s state: %s %s %s %s %s %s\n", prefix, blkAddr, blkAddr + blkSize - 1, isSecure ? "s" : "ns", isForward ? "Forward" : "", @@ -600,7 +605,8 @@ MSHR::print(std::ostream &os, int verbosity, const std::string &prefix) const inService ? "InSvc" : "", downstreamPending ? "DwnPend" : "", postInvalidate ? "PostInv" : "", - postDowngrade ? "PostDowngr" : ""); + postDowngrade ? "PostDowngr" : "", + hasFromCache() ? "HasFromCache" : ""); if (!targets.empty()) { ccprintf(os, "%s Targets:\n", prefix); |