mem: Fix incorrect assert failure in the Cache
authorPrakash Ramrakhyani <prakash.ramrakhyani@arm.com>
Fri, 7 Mar 2014 20:56:23 +0000 (15:56 -0500)
committerPrakash Ramrakhyani <prakash.ramrakhyani@arm.com>
Fri, 7 Mar 2014 20:56:23 +0000 (15:56 -0500)
This patch fixes an assert condition that is not true at all
times. There are valid situations that arise in dual-core
dual-workload runs where the assert condition is false. The function
call following the assert however needs to be called only when the
condition is true (a block cannot be invalidated in the tags structure
if has not been allocated in the structure, and the tempBlock is never
allocated). Hence the 'assert' has been replaced with an 'if'.

src/mem/cache/cache_impl.hh

index b482d6314628d4998ade331d7ef47d86dcc778f6..e8e1876a04efb075cc556c5350350eff8ab1037b 100644 (file)
@@ -183,8 +183,8 @@ Cache<TagStore>::satisfyCpuSideRequest(PacketPtr pkt, BlkType *blk,
                     pkt->assertMemInhibit();
                 }
                 // on ReadExReq we give up our copy unconditionally
-                assert(blk != tempBlock);
-                tags->invalidate(blk);
+                if (blk != tempBlock)
+                    tags->invalidate(blk);
                 blk->invalidate();
             } else if (blk->isWritable() && !pending_downgrade
                       && !pkt->sharedAsserted() && !pkt->req->isInstFetch()) {
@@ -1456,8 +1456,8 @@ Cache<TagStore>::handleSnoop(PacketPtr pkt, BlkType *blk,
     // Do this last in case it deallocates block data or something
     // like that
     if (invalidate) {
-        assert(blk != tempBlock);
-        tags->invalidate(blk);
+        if (blk != tempBlock)
+            tags->invalidate(blk);
         blk->invalidate();
     }