// 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,
// 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
// 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();
// 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