From 6e433ed8851ba40ae29071bef1aeece5615f5322 Mon Sep 17 00:00:00 2001 From: Matthew Poremba Date: Wed, 22 Nov 2023 14:05:43 -0800 Subject: [PATCH] mem-ruby: Fixes for new AtomicWait event in VIPER TCC (#585) The AtomicWait event was not being woken up properly due to the numPending count in the TBE not being decremented. This patch decrements the count when Data is returned. Since that moves to a base state, the TBE should no longer be needed. Additionally added a transition which stalls and wait when an AtomicWait occurs while in WI state so that it retries. Change-Id: Ic8bfc700f9df3f95bea0799121898926a23d8163 --- src/mem/ruby/protocol/GPU_VIPER-TCC.sm | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/mem/ruby/protocol/GPU_VIPER-TCC.sm b/src/mem/ruby/protocol/GPU_VIPER-TCC.sm index 14c9c8c1cc..e599d2f937 100644 --- a/src/mem/ruby/protocol/GPU_VIPER-TCC.sm +++ b/src/mem/ruby/protocol/GPU_VIPER-TCC.sm @@ -938,7 +938,7 @@ machine(MachineType:TCC, "TCC Cache") st_stallAndWaitRequest; } - transition({I, IV, V}, AtomicWait) { + transition({I, IV, V, WI}, AtomicWait) { // don't profile as hit or miss since it will be tried again /* By putting the stalled requests in a buffer, we reduce resource contention @@ -1273,6 +1273,7 @@ machine(MachineType:TCC, "TCC Cache") wardb_writeAtomicResponseDirtyBytes; pa_performAtomic; baplr_sendBypassedAtomicPerformedLocallyResponse; + dt_deallocateTBE; pr_popResponseQueue; }