ruby: Don't set the block data when a store conditional fails
Previously the Sequencer upon a Store Conditional would unconditionally set the data of the memory location. This change checks and prevents a failed Store Conditional from modifying any data. Change-Id: Id63c9579d8f054f0e95c6d338a7e31aa48762755 Reviewed-by: Andreas Sandberg <andreas.sandberg@arm.com> Reviewed-on: https://gem5-review.googlesource.com/2902 Reviewed-by: Jason Lowe-Power <jason@lowepower.com> Reviewed-by: Bradford Beckmann <brad.beckmann@amd.com> Maintainer: Jason Lowe-Power <jason@lowepower.com>
This commit is contained in:
@@ -489,7 +489,9 @@ Sequencer::hitCallback(SequencerRequest* srequest, DataBlock& data,
|
||||
data.setData(&overwrite_val[0],
|
||||
getOffset(request_address), pkt->getSize());
|
||||
DPRINTF(RubySequencer, "swap data %s\n", data);
|
||||
} else {
|
||||
} else if (type != RubyRequestType_Store_Conditional || llscSuccess) {
|
||||
// Types of stores set the actual data here, apart from
|
||||
// failed Store Conditional requests
|
||||
data.setData(pkt->getConstPtr<uint8_t>(),
|
||||
getOffset(request_address), pkt->getSize());
|
||||
DPRINTF(RubySequencer, "set data %s\n", data);
|
||||
|
||||
Reference in New Issue
Block a user