summaryrefslogtreecommitdiff
path: root/src/mem/cache/base.cc
diff options
context:
space:
mode:
authorTiago Mück <tiago.muck@arm.com>2019-07-29 13:45:31 -0500
committerTiago Mück <tiago.muck@arm.com>2019-07-31 15:11:55 +0000
commit603f1378c0459f58593683782eaafb69500f0693 (patch)
tree080a7d85237b79ac432cb3686424182a2378c5a0 /src/mem/cache/base.cc
parentafc30c07f598a8dd45ea4bc458f89d3485c50025 (diff)
downloadgem5-603f1378c0459f58593683782eaafb69500f0693.tar.xz
mem-cache: mark block as dirty when handling SW prefetch
This addresses the issue described in 64687ee mem-cache: Mark block as dirty after a SWPrefetchEXResp. Previous patch misses cases when the prefetch response is ReadExResp or UpgradeResp. Also, marking the block as dirty in serviceMSHRTargets instead of in handleFill covers cases when the prefetch is coalesced with other requests. Change-Id: I2b377fdd240eb0f09e720b6bb284dee6545925ce Signed-off-by: Tiago Mück <tiago.muck@arm.com> Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/19688 Reviewed-by: Nikos Nikoleris <nikos.nikoleris@arm.com> Reviewed-by: Daniel Carvalho <odanrc@yahoo.com.br> Maintainer: Nikos Nikoleris <nikos.nikoleris@arm.com> Tested-by: kokoro <noreply+kokoro@google.com>
Diffstat (limited to 'src/mem/cache/base.cc')
-rw-r--r--src/mem/cache/base.cc24
1 files changed, 0 insertions, 24 deletions
diff --git a/src/mem/cache/base.cc b/src/mem/cache/base.cc
index 082650c09..0de7f2150 100644
--- a/src/mem/cache/base.cc
+++ b/src/mem/cache/base.cc
@@ -1409,30 +1409,6 @@ BaseCache::handleFill(PacketPtr pkt, CacheBlk *blk, PacketList &writebacks,
chatty_assert(!isReadOnly, "Should never see dirty snoop response "
"in read-only cache %s\n", name());
- } else if (pkt->cmd.isSWPrefetch() && pkt->needsWritable()) {
- // All other copies of the block were invalidated and we
- // have an exclusive copy.
-
- // The coherence protocol assumes that if we fetched an
- // exclusive copy of the block, we have the intention to
- // modify it. Therefore the MSHR for the PrefetchExReq has
- // been the point of ordering and this cache has commited
- // to respond to snoops for the block.
- //
- // In most cases this is true anyway - a PrefetchExReq
- // will be followed by a WriteReq. However, if that
- // doesn't happen, the block is not marked as dirty and
- // the cache doesn't respond to snoops that has committed
- // to do so.
- //
- // To avoid deadlocks in cases where there is a snoop
- // between the PrefetchExReq and the expected WriteReq, we
- // proactively mark the block as Dirty.
-
- blk->status |= BlkDirty;
-
- panic_if(!isReadOnly, "Prefetch exclusive requests from read-only "
- "cache %s\n", name());
}
}