mem: Fix bug in cache request retry mechanism
authorAndreas Hansson <andreas.hansson@arm.com>
Tue, 20 Jan 2015 13:12:01 +0000 (08:12 -0500)
committerAndreas Hansson <andreas.hansson@arm.com>
Tue, 20 Jan 2015 13:12:01 +0000 (08:12 -0500)
This patch ensures that inhibited packets that are about to be turned
into express snoops do not update the retry flag in the cache.

src/mem/cache/cache_impl.hh

index cb02f7558d2b8264f9a516a871d66c026934077a..62b65fc421529b174b3e7ab9bf8ba14cfc0c6a64 100644 (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;