summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/mem/cache/mshr.cc4
1 files changed, 3 insertions, 1 deletions
diff --git a/src/mem/cache/mshr.cc b/src/mem/cache/mshr.cc
index 13a50169c..4241fa375 100644
--- a/src/mem/cache/mshr.cc
+++ b/src/mem/cache/mshr.cc
@@ -612,8 +612,10 @@ MSHR::promoteReadable()
void
MSHR::promoteWritable()
{
+ PacketPtr def_tgt_pkt = deferredTargets.front().pkt;
if (deferredTargets.needsWritable &&
- !(hasPostInvalidate() || hasPostDowngrade())) {
+ !(hasPostInvalidate() || hasPostDowngrade()) &&
+ !def_tgt_pkt->req->isCacheInvalidate()) {
// We got a writable response, but we have deferred targets
// which are waiting to request a writable copy (not because
// of a pending invalidate). This can happen if the original