From 1b05c0050bdee2024d89b4a083b793af7ae1fbd9 Mon Sep 17 00:00:00 2001 From: Giacomo Travaglini Date: Sat, 28 Oct 2023 22:59:51 +0100 Subject: [PATCH] mem-ruby: Clear the atomic log from the DataBlock in CHI The new far atomics implementation [1] didn't take into consideration it was supposed to manually clear the atomic log. This caused a memory leak where the log queue was getting bigger and bigger as no cleaning was happening [1]: https://github.com/gem5/gem5/pull/177 Change-Id: I4a74fbf15d21e35caec69c29117e2d98cc86d5ff Signed-off-by: Giacomo Travaglini --- src/mem/ruby/protocol/chi/CHI-cache-actions.sm | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/mem/ruby/protocol/chi/CHI-cache-actions.sm b/src/mem/ruby/protocol/chi/CHI-cache-actions.sm index 4c9498423c..ffa57cb03b 100644 --- a/src/mem/ruby/protocol/chi/CHI-cache-actions.sm +++ b/src/mem/ruby/protocol/chi/CHI-cache-actions.sm @@ -2299,6 +2299,7 @@ action(UpdateDataState_FromADataResp, desc="") { tbe.oldDataBlk := tbe.dataBlk; tbe.dataBlk.atomicPartial(tbe.dataBlk, tbe.atomic_op); + tbe.dataBlk.clearAtomicLogEntries(); tbe.dataDirty := true; DPRINTF(RubySlicc, "Atomic after %s\n", tbe.dataBlk); @@ -3424,6 +3425,7 @@ action(Callback_AtomicHit, desc="") { DataBlock oldDataBlk; oldDataBlk := tbe.dataBlk; tbe.dataBlk.atomicPartial(tbe.dataBlk, tbe.atomic_op); + tbe.dataBlk.clearAtomicLogEntries(); sequencer.atomicCallback(tbe.addr, oldDataBlk, false); DPRINTF(RubySlicc, "Atomic after %s\n", tbe.dataBlk); @@ -3490,6 +3492,7 @@ action(Callback_Miss, desc="") { DataBlock oldDataBlk; oldDataBlk := tbe.dataBlk; tbe.dataBlk.atomicPartial(tbe.dataBlk, tbe.atomic_op); + tbe.dataBlk.clearAtomicLogEntries(); sequencer.atomicCallback(tbe.addr, oldDataBlk, false); DPRINTF(RubySlicc, "Atomic after %s\n", tbe.dataBlk);