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
This commit is contained in:
Matthew Poremba
2023-11-22 14:05:43 -08:00
committed by GitHub
parent 23a22ed95c
commit 6e433ed885

View File

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