mem-ruby: Pass UD on ReadShared hit only if SD is not allowed

This commit allows CompData_SD be sent when ReadShared hits on UD line and
the local cache keeps the line, unless the request doesn't allow SD.

Change-Id: I337f24c871cc4c19c5b5fb11f9b35c0a8eb7911c
This commit is contained in:
Minje Jun
2024-02-06 16:03:11 +09:00
committed by Minje Jun
parent 628be390a0
commit db5c71a919
2 changed files with 6 additions and 6 deletions

View File

@@ -2600,18 +2600,18 @@ action(Send_CompData, desc="") {
bool is_rd_nsd := tbe.reqType == CHIRequestType:ReadNotSharedDirty;
bool is_rd_unique := tbe.reqType == CHIRequestType:ReadUnique;
// if the request type allows SD
bool snd_dirty_on_rs := is_rd_shared && !is_rd_nsd;
// Send UC/UD on ReadShared or ReadNotSharedDirty if the line has no sharers
// and one of the followings are met
// 1) the config allows or
// 2) local cache won't have the line or
// 3) dirty will be passed
// 3) Dirty will be passed but the request doesn't allow SD
bool snd_unique_on_rs := (fwd_unique_on_readshared ||
tbe.dataToBeInvalid ||
snd_dirty_on_rs)
(tbe.dataDirty && is_rd_nsd))
&& tbe.dataUnique && tbe.dir_sharers.isEmpty();
// if the request type allows and we won't be caching the data
bool snd_dirty_on_rs := (is_rd_shared && !is_rd_nsd) &&
!tbe.dir_ownerExists;
if (is_rd_once) {
tbe.snd_msgType := CHIDataType:CompData_I;

View File

@@ -767,7 +767,7 @@ transition({UD_RSC,SD_RSC}, Local_Eviction, BUSY_BLKD) {ReplTBEAvailable} {
ProcessNextState;
}
transition({UD_RSC,SD_RSC,UC_RSC,UD_RU,UC_RU,UD_RSD}, Global_Eviction, BUSY_BLKD) {ReplTBEAvailable} {
transition({UD_RSC,SD_RSC,UC_RSC,UD_RU,UC_RU,UD_RSD,SD_RSD}, Global_Eviction, BUSY_BLKD) {ReplTBEAvailable} {
Initiate_Replacement;
Initiate_Replacement_WB_BackInvalidate;
Profile_Eviction;