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:
committed by
Gabriel Busnot
parent
c290ead895
commit
5a5fb03c77
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user