mem-ruby: fix CHI Evict race condition

When an Evict request is received from upstream for a shared line
and the line is no longer cached locally (or on any other upstream
cache), we need to also send an Evict downstream. In this case we need
to wait until our outgoing Evict completes before completing the Evict
from upstream in order be able to resolve race conditions with incoming
snoops. E.g.: while our outgoing Evict is pending we may receive a
snoop requesting data, but we won't be able to complete this snoop if
we have already completed all upstream Evicts and we no longer have the
line.

Change-Id: I23ac4f0a9c4ddd81e2425376c8d1e1c7fb66d107
Signed-off-by: Tiago Mück <tiago.muck@arm.com>
This commit is contained in:
Reiley Jeyapaul
2023-06-15 12:36:23 -05:00
committed by Tiago Mück
parent c218104f52
commit c9ff54677f

View File

@@ -1,5 +1,5 @@
/*
* Copyright (c) 2021-2022 ARM Limited
* Copyright (c) 2021-2023 ARM Limited
* All rights reserved
*
* The license below extends only to copyright in the software and shall
@@ -923,8 +923,8 @@ action(Initiate_Evict, desc="") {
tbe.actions.push(Event:WriteBEPipe);
tbe.actions.push(Event:SendWBData);
} else {
tbe.actions.push(Event:SendCompIResp);
tbe.actions.push(Event:SendEvict);
tbe.actions.push(Event:SendCompIResp);
}
} else {
tbe.actions.push(Event:SendCompIResp);