mem-ruby: Fix wrong test in CHI functional reads

A bad write mask inclusion test in CHI cache functionalRead and CHI data message
functionalRead was causing clean data not to be read in some cases. The issue is
detailed in issue GEM5-1002.

Change-Id: I91254fa87636e8d22a8b2f27ad375f68f997932d
Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/46559
Reviewed-by: Jason Lowe-Power <power.jg@gmail.com>
Reviewed-by: Tiago Mück <tiago.muck@arm.com>
Maintainer: Jason Lowe-Power <power.jg@gmail.com>
Tested-by: kokoro <noreply+kokoro@google.com>
This commit is contained in:
Gabriel Busnot
2021-05-21 11:00:32 +02:00
committed by Gabriel Busnot
parent c290ead895
commit 5a5fb03c77
2 changed files with 2 additions and 2 deletions

View File

@@ -215,7 +215,7 @@ void functionalRead(Addr addr, Packet *pkt, WriteMask &mask) {
WriteMask test_mask := mask;
test_mask.orMask(read_mask);
if ((test_mask.cmpMask(mask) == false) || dirty) {
if ((mask.cmpMask(test_mask) == false) || dirty) {
if (from_tbe) {
if(testAndReadMask(addr, tbe.dataBlk, read_mask, pkt)) {
DPRINTF(RubySlicc, "functionalRead tbe %x %s dirty=%d %s %s\n", addr, tbe.dataBlk, tbe.dataDirty, read_mask, mask);

View File

@@ -217,7 +217,7 @@ structure(CHIDataMsg, desc="", interface="Message") {
assert(bitMask.isEmpty() == false);
WriteMask test_mask := mask;
test_mask.orMask(bitMask);
if ((test_mask.cmpMask(mask) == false) || is_dirty) {
if ((mask.cmpMask(test_mask) == false) || is_dirty) {
if (testAndReadMask(addr, dataBlk, bitMask, pkt)) {
mask.orMask(bitMask);
return true;