summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/mem/cache/cache.cc12
-rw-r--r--src/mem/cache/mshr.cc3
2 files changed, 5 insertions, 10 deletions
diff --git a/src/mem/cache/cache.cc b/src/mem/cache/cache.cc
index 1a169c8ea..9079606cf 100644
--- a/src/mem/cache/cache.cc
+++ b/src/mem/cache/cache.cc
@@ -1783,9 +1783,6 @@ Cache::handleFill(PacketPtr pkt, CacheBlk *blk, PacketList &writebacks,
// dirty as part of satisfyRequest
if (pkt->cmd == MemCmd::WriteLineReq) {
assert(!pkt->hasSharers());
- // at the moment other caches do not respond to the
- // invalidation requests corresponding to a whole-line write
- assert(!pkt->cacheResponding());
}
// here we deal with setting the appropriate state of the line,
@@ -1985,11 +1982,10 @@ Cache::handleSnoop(PacketPtr pkt, CacheBlk *blk, bool is_timing,
// We may end up modifying both the block state and the packet (if
// we respond in atomic mode), so just figure out what to do now
- // and then do it later. If we find dirty data while snooping for
- // an invalidate, we don't need to send a response. The
+ // and then do it later. We respond to all snoops that need
+ // responses provided we have the block in dirty state. The
// invalidation itself is taken care of below.
- bool respond = blk->isDirty() && pkt->needsResponse() &&
- pkt->cmd != MemCmd::InvalidateReq;
+ bool respond = blk->isDirty() && pkt->needsResponse();
bool have_writable = blk->isWritable();
// Invalidate any prefetch's from below that would strip write permissions
@@ -2160,7 +2156,7 @@ Cache::recvTimingSnoopReq(PacketPtr pkt)
// state to determine if it is dirty and writable, we use the
// command and fields of the writeback packet
bool respond = wb_pkt->cmd == MemCmd::WritebackDirty &&
- pkt->needsResponse() && pkt->cmd != MemCmd::InvalidateReq;
+ pkt->needsResponse();
bool have_writable = !wb_pkt->hasSharers();
bool invalidate = pkt->isInvalidate();
diff --git a/src/mem/cache/mshr.cc b/src/mem/cache/mshr.cc
index 7c560095c..577e8eb79 100644
--- a/src/mem/cache/mshr.cc
+++ b/src/mem/cache/mshr.cc
@@ -402,8 +402,7 @@ MSHR::handleSnoop(PacketPtr pkt, Counter _order)
// Start by determining if we will eventually respond or not,
// matching the conditions checked in Cache::handleSnoop
- bool will_respond = isPendingModified() && pkt->needsResponse() &&
- pkt->cmd != MemCmd::InvalidateReq;
+ bool will_respond = isPendingModified() && pkt->needsResponse();
// The packet we are snooping may be deleted by the time we
// actually process the target, and we consequently need to