Tiago Muck has uploaded this change for review. ( https://gem5-review.googlesource.com/c/public/gem5/+/57391 )

Change subject: mem-ruby: fix state updates on WriteCleanFull
......................................................................

mem-ruby: fix state updates on WriteCleanFull

- fix wrong variable check at UpdateDirState_FromReqDataResp
- even after a WriteClean, dataMaybeDirtyUpstream still applies if
  there is an exclusive owner upstream.

JIRA: https://gem5.atlassian.net/browse/GEM5-1195

Change-Id: If1fa3ee40e30226db3a66c34633316e751eb7c4d
Signed-off-by: Tiago Mück <tiago.m...@arm.com>
---
M src/mem/ruby/protocol/chi/CHI-cache-actions.sm
1 file changed, 22 insertions(+), 3 deletions(-)



diff --git a/src/mem/ruby/protocol/chi/CHI-cache-actions.sm b/src/mem/ruby/protocol/chi/CHI-cache-actions.sm
index d865d6c..79e4510 100644
--- a/src/mem/ruby/protocol/chi/CHI-cache-actions.sm
+++ b/src/mem/ruby/protocol/chi/CHI-cache-actions.sm
@@ -1672,7 +1672,7 @@
       } else if (in_msg.type == CHIDataType:CBWrData_UD_PD) {
assert(tbe.dir_ownerExists && tbe.dir_ownerIsExcl && (tbe.dir_owner == in_msg.responder));
         assert(tbe.dir_sharers.isElement(in_msg.responder));
-        if (tbe.pendReqType != CHIRequestType:WriteCleanFull) {
+        if (tbe.reqType != CHIRequestType:WriteCleanFull) {
           tbe.dir_ownerExists := false;
           tbe.dir_ownerIsExcl := false;
           tbe.dir_sharers.remove(in_msg.responder);
@@ -1687,7 +1687,7 @@
         assert(tbe.dir_sharers.isElement(in_msg.responder));
         tbe.dir_ownerExists := false;
         tbe.dir_ownerIsExcl := false;
-        if (tbe.pendReqType != CHIRequestType:WriteCleanFull) {
+        if (tbe.reqType != CHIRequestType:WriteCleanFull) {
           tbe.dir_sharers.remove(in_msg.responder);
         }

@@ -1834,7 +1834,10 @@
         assert(tbe.dataUnique);
         tbe.dataDirty := true;
         tbe.dataValid := true;
-        tbe.dataMaybeDirtyUpstream := false;
+        // upstream data can still be UC if this is a WriteCleanFull
+        tbe.dataMaybeDirtyUpstream :=
+          (tbe.reqType == CHIRequestType:WriteCleanFull) &&
+          tbe.dir_ownerExists && tbe.dir_ownerIsExcl;

       } else if (in_msg.type == CHIDataType:CBWrData_SD_PD) {
         tbe.dataDirty := true;

--
To view, visit https://gem5-review.googlesource.com/c/public/gem5/+/57391
To unsubscribe, or for help writing mail filters, visit https://gem5-review.googlesource.com/settings

Gerrit-Project: public/gem5
Gerrit-Branch: develop
Gerrit-Change-Id: If1fa3ee40e30226db3a66c34633316e751eb7c4d
Gerrit-Change-Number: 57391
Gerrit-PatchSet: 1
Gerrit-Owner: Tiago Muck <tiago.m...@arm.com>
Gerrit-MessageType: newchange
_______________________________________________
gem5-dev mailing list -- gem5-dev@gem5.org
To unsubscribe send an email to gem5-dev-le...@gem5.org
%(web_page_url)slistinfo%(cgiext)s/%(_internal_name)s

Reply via email to