From 49798e0eface6ad81f6227ea54980268656819c0 Mon Sep 17 00:00:00 2001 From: "Daniel R. Carvalho" Date: Fri, 26 Oct 2018 16:40:51 +0200 Subject: mem-cache: Fix double block invalidation Block was being invalidated twice when not a tempBlock. Make explicit that the else case is only to be applied when handling the tempBlock, as otherwise the Tags should be taking care of the invalidation. Change-Id: Ie7603fdbe156c54e94bbdc83541b55e66f8d250f Signed-off-by: Daniel R. Carvalho Reviewed-on: https://gem5-review.googlesource.com/c/13895 Reviewed-by: Nikos Nikoleris Maintainer: Nikos Nikoleris --- src/mem/cache/base.cc | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/mem/cache/base.cc b/src/mem/cache/base.cc index 7bb0e0fdb..6f3914ccd 100644 --- a/src/mem/cache/base.cc +++ b/src/mem/cache/base.cc @@ -1305,9 +1305,13 @@ BaseCache::allocateBlock(const PacketPtr pkt, PacketList &writebacks) void BaseCache::invalidateBlock(CacheBlk *blk) { - if (blk != tempBlock) + // If handling a block present in the Tags, let it do its invalidation + // process, which will update stats and invalidate the block itself + if (blk != tempBlock) { tags->invalidate(blk); - blk->invalidate(); + } else { + tempBlock->invalidate(); + } } void -- cgit v1.2.3