summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorNilay Vaish <nilay@cs.wisc.edu>2015-08-03 22:44:28 -0500
committerNilay Vaish <nilay@cs.wisc.edu>2015-08-03 22:44:28 -0500
commit9bf3b8828a19570f50914d86d76e32896ecd12bb (patch)
tree983003b7070af638065b819353e1119c29347861 /src
parent3d782f8df7450af529d30c0488a5c12e0701dbed (diff)
downloadgem5-9bf3b8828a19570f50914d86d76e32896ecd12bb.tar.xz
ruby: mesi two,three level: copy data only when dirty
The level 2 controller has a bug. In one particular action, the data block was copied from a message irrespective whether the block is dirty or not. In cases when L1 sends no data, the data value copied was incorrect.
Diffstat (limited to 'src')
-rw-r--r--src/mem/protocol/MESI_Two_Level-L2cache.sm2
1 files changed, 1 insertions, 1 deletions
diff --git a/src/mem/protocol/MESI_Two_Level-L2cache.sm b/src/mem/protocol/MESI_Two_Level-L2cache.sm
index ede420626..6afd0fcea 100644
--- a/src/mem/protocol/MESI_Two_Level-L2cache.sm
+++ b/src/mem/protocol/MESI_Two_Level-L2cache.sm
@@ -628,8 +628,8 @@ machine(L2Cache, "MESI Directory L2 Cache CMP")
action(mr_writeDataToCacheFromRequest, "mr", desc="Write data from response queue to cache") {
peek(L1RequestL2Network_in, RequestMsg) {
assert(is_valid(cache_entry));
- cache_entry.DataBlk := in_msg.DataBlk;
if (in_msg.Dirty) {
+ cache_entry.DataBlk := in_msg.DataBlk;
cache_entry.Dirty := in_msg.Dirty;
}
}