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 <giacomo.travaglini@arm.com>
This commit is contained in:
Giacomo Travaglini
2023-10-28 22:59:51 +01:00
parent e496d29171
commit 1b05c0050b

View File

@@ -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);