From 66decb2e931bbb50bc218eef9e9c3daa145032e8 Mon Sep 17 00:00:00 2001 From: Nicholas Mosier Date: Thu, 25 Apr 2024 11:14:37 -0700 Subject: [PATCH] mem-ruby: Fix functional reads for MESI Three-Level messages (#1045) Fix #1044. This patch adds checks for message types (PUTX_COPY, DATA, DATA_EXCLUSIVE) that contain data blocks but were missing from the original `functionalRead` method in MESI Three-Level messages. Change-Id: I0cedc314166c9cc037bf20f5b7fef5552dd1253c --- src/mem/ruby/protocol/MESI_Three_Level-msg.sm | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/mem/ruby/protocol/MESI_Three_Level-msg.sm b/src/mem/ruby/protocol/MESI_Three_Level-msg.sm index a16e374fd6..740011ac83 100644 --- a/src/mem/ruby/protocol/MESI_Three_Level-msg.sm +++ b/src/mem/ruby/protocol/MESI_Three_Level-msg.sm @@ -81,8 +81,9 @@ structure(CoherenceMsg, desc="...", interface="Message") { PrefetchBit Prefetch, desc="Is this a prefetch request"; bool functionalRead(Packet *pkt) { - // Only PUTX messages contains the data block - if (Class == CoherenceClass:PUTX) { + // Valid data block is only present in message with following types + if (Class == CoherenceClass:PUTX || + Class == CoherenceClass:DATA_EXCLUSIVE) { return testAndRead(addr, DataBlk, pkt); }