Fix bug on exclusive response to ReadReq with pending WriteReq.

--HG--
extra : convert_revision : 5429cd7ca84cf6348813a4607fa16f76aa5df7e0
This commit is contained in:
Steve Reinhardt
2007-11-16 20:10:32 -08:00
parent 5d23f86e98
commit f03a62008a

View File

@@ -330,6 +330,23 @@ MSHR::handleFill(Packet *pkt, CacheBlk *blk)
// service... assert shared line on its behalf
pkt->assertShared();
}
if (!pkt->sharedAsserted() && !pendingInvalidate
&& deferredTargets->needsExclusive) {
// We got an exclusive response, but we have deferred targets
// which are waiting to request an exclusive copy (not because
// of a pending invalidate). This can happen if the original
// request was for a read-only (non-exclusive) block, but we
// got an exclusive copy anyway because of the E part of the
// MOESI/MESI protocol. Since we got the exclusive copy
// there's no need to defer the targets, so move them up to
// the regular target list.
assert(!targets->needsExclusive);
targets->needsExclusive = true;
// this clears out deferredTargets too
targets->splice(targets->end(), *deferredTargets);
deferredTargets->resetFlags();
}
}