mem: Fix bug in cache request retry mechanism

This patch ensures that inhibited packets that are about to be turned
into express snoops do not update the retry flag in the cache.
This commit is contained in:
Andreas Hansson 2015-01-20 08:12:01 -05:00
parent da0c770943
commit 6096e2f9c1

View file

@ -2029,11 +2029,14 @@ Cache<TagStore>::CpuSidePort::recvTimingReq(PacketPtr pkt)
bool success = false;
// always let inhibited requests through, even if blocked
// always let inhibited requests through, even if blocked,
// ultimately we should check if this is an express snoop, but at
// the moment that flag is only set in the cache itself
if (pkt->memInhibitAsserted()) {
// this should always succeed
success = cache->recvTimingReq(pkt);
assert(success);
// do not change the current retry state
bool M5_VAR_USED bypass_success = cache->recvTimingReq(pkt);
assert(bypass_success);
return true;
} else if (blocked || mustSendRetry) {
// either already committed to send a retry, or blocked
success = false;