summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAli Saidi <Ali.Saidi@ARM.com>2012-03-01 17:26:31 -0600
committerAli Saidi <Ali.Saidi@ARM.com>2012-03-01 17:26:31 -0600
commitd907d0ec723538c7969bf8f2f2d6f29439b02985 (patch)
treef5a2fc7545c1926e66afed6f3da6dcb5e2ab07e1 /src
parent86d1042d9fabdea7afb8808d4f8395d9e41fdf75 (diff)
downloadgem5-d907d0ec723538c7969bf8f2f2d6f29439b02985.tar.xz
Cache: Fix an issue with LRU when bonus block is used to complete transaction.
The block is never inserted because it's the one extra block in the cache, but it can be invalidated twice in a row. In that case the block doesn't have a new master id (beacuse it was never inserted), however it is valid and the accounting goes wrong at that point.
Diffstat (limited to 'src')
-rw-r--r--src/mem/cache/cache_impl.hh1
1 files changed, 1 insertions, 0 deletions
diff --git a/src/mem/cache/cache_impl.hh b/src/mem/cache/cache_impl.hh
index 40359d31e..024ae3297 100644
--- a/src/mem/cache/cache_impl.hh
+++ b/src/mem/cache/cache_impl.hh
@@ -994,6 +994,7 @@ Cache<TagStore>::handleResponse(PacketPtr pkt)
if (blk->isDirty()) {
allocateWriteBuffer(writebackBlk(blk), time, true);
}
+ blk->status &= ~BlkValid;
tags->invalidateBlk(blk);
}