summaryrefslogtreecommitdiff
path: root/src/mem/cache/mshr.cc
diff options
context:
space:
mode:
authorCurtis Dunham <Curtis.Dunham@arm.com>2014-10-29 23:18:24 -0500
committerCurtis Dunham <Curtis.Dunham@arm.com>2014-10-29 23:18:24 -0500
commit46f9f11a5575a0ec8a69a1c0181b37668de65152 (patch)
treea8e093ee4c180b1f61099ce0487076fc6ea374ef /src/mem/cache/mshr.cc
parent8b7724d04c8bd337c096ac4364beceac6a64cde2 (diff)
downloadgem5-46f9f11a5575a0ec8a69a1c0181b37668de65152.tar.xz
mem: have WriteInvalidate obsolete MSHRs
Since WriteInvalidate directly writes into the cache, it can create tricky timing interleavings with reads and writes to the same cache line that haven't yet completed. This patch ensures that these requests, when completed, don't overwrite the newer data from the WriteInvalidate.
Diffstat (limited to 'src/mem/cache/mshr.cc')
-rw-r--r--src/mem/cache/mshr.cc5
1 files changed, 3 insertions, 2 deletions
diff --git a/src/mem/cache/mshr.cc b/src/mem/cache/mshr.cc
index 79a91da2b..fcf9fc425 100644
--- a/src/mem/cache/mshr.cc
+++ b/src/mem/cache/mshr.cc
@@ -62,8 +62,8 @@
using namespace std;
MSHR::MSHR() : readyTime(0), _isUncacheable(false), downstreamPending(false),
- pendingDirty(false), postInvalidate(false),
- postDowngrade(false), queue(NULL), order(0), addr(0), size(0),
+ pendingDirty(false), postInvalidate(false), postDowngrade(false),
+ _isObsolete(false), queue(NULL), order(0), addr(0), size(0),
isSecure(false), inService(false), isForward(false),
threadNum(InvalidThreadID), data(NULL)
{
@@ -214,6 +214,7 @@ MSHR::allocate(Addr _addr, int _size, PacketPtr target, Tick whenReady,
_isUncacheable = target->req->isUncacheable();
inService = false;
downstreamPending = false;
+ _isObsolete = false;
threadNum = 0;
assert(targets.isReset());
// Don't know of a case where we would allocate a new MSHR for a