changeset 8f37a23e02d7 in /z/repo/m5
details: http://repo.m5sim.org/m5?cmd=changeset;node=8f37a23e02d7
description:
Ruby: Fixes MESI CMP directory protocol
The current implementation of MESI CMP directory protocol is broken.
This patch, from Arkaprava Basu, fixes the protocol.
diffstat:
src/mem/protocol/MESI_CMP_directory-L1cache.sm | 25 +++++++++++++++++++------
src/mem/protocol/MESI_CMP_directory-L2cache.sm | 25 ++++++++++++++++---------
2 files changed, 35 insertions(+), 15 deletions(-)
diffs (123 lines):
diff -r 7107a2f3e53a -r 8f37a23e02d7
src/mem/protocol/MESI_CMP_directory-L1cache.sm
--- a/src/mem/protocol/MESI_CMP_directory-L1cache.sm Thu Jan 13 12:30:18
2011 -0800
+++ b/src/mem/protocol/MESI_CMP_directory-L1cache.sm Thu Jan 13 22:17:11
2011 -0600
@@ -70,6 +70,7 @@
M_I, desc="L1 replacing, waiting for ACK";
E_I, desc="L1 replacing, waiting for ACK";
+ SINK_WB_ACK, desc="This is to sink WB_Acks from L2";
}
@@ -749,9 +750,8 @@
l_popRequestQueue;
}
- transition(M_I, Inv, I) {
+ transition(M_I, Inv, SINK_WB_ACK) {
ft_sendDataToL2_fromTBE;
- s_deallocateTBE;
l_popRequestQueue;
}
@@ -766,16 +766,14 @@
l_popRequestQueue;
}
- transition(M_I, Fwd_GETX, I) {
+ transition(M_I, Fwd_GETX, SINK_WB_ACK) {
dt_sendDataToRequestor_fromTBE;
- s_deallocateTBE;
l_popRequestQueue;
}
- transition(M_I, {Fwd_GETS, Fwd_GET_INSTR}, I) {
+ transition(M_I, {Fwd_GETS, Fwd_GET_INSTR}, SINK_WB_ACK) {
dt_sendDataToRequestor_fromTBE;
d2t_sendDataToL2_fromTBE;
- s_deallocateTBE;
l_popRequestQueue;
}
@@ -865,6 +863,21 @@
s_deallocateTBE;
o_popIncomingResponseQueue;
}
+
+ transition(SINK_WB_ACK, {Load, Store, Ifetch, L1_Replacement}){
+ z_recycleMandatoryQueue;
+
+ }
+
+ transition(SINK_WB_ACK, Inv){
+ fi_sendInvAck;
+ l_popRequestQueue;
+ }
+
+ transition(SINK_WB_ACK, WB_Ack){
+ s_deallocateTBE;
+ o_popIncomingResponseQueue;
+ }
}
diff -r 7107a2f3e53a -r 8f37a23e02d7
src/mem/protocol/MESI_CMP_directory-L2cache.sm
--- a/src/mem/protocol/MESI_CMP_directory-L2cache.sm Thu Jan 13 12:30:18
2011 -0800
+++ b/src/mem/protocol/MESI_CMP_directory-L2cache.sm Thu Jan 13 22:17:11
2011 -0600
@@ -734,11 +734,13 @@
// BASE STATE - I
// Transitions from I (Idle)
- transition({NP, IS, ISS, IM, SS, M, M_I, MT_I, MCT_I, I_I, S_I, SS_MB, M_MB,
MT_IIB, MT_IB, MT_SB}, L1_PUTX) {
+ transition({NP, IS, ISS, IM, SS, M, M_I, I_I, S_I, M_MB, MT_IB, MT_SB},
L1_PUTX) {
+ t_sendWBAck;
jj_popL1RequestQueue;
}
- transition({NP, SS, M, MT, M_I, MT_I, MCT_I, I_I, S_I, IS, ISS, IM, SS_MB,
M_MB, MT_IIB, MT_IB, MT_SB}, L1_PUTX_old) {
+ transition({NP, SS, M, MT, M_I, I_I, S_I, IS, ISS, IM, M_MB, MT_IB, MT_SB},
L1_PUTX_old) {
+ t_sendWBAck;
jj_popL1RequestQueue;
}
@@ -968,6 +970,10 @@
mmu_markExclusiveFromUnblock;
k_popUnblockQueue;
}
+
+ transition(MT_IIB, {L1_PUTX, L1_PUTX_old}){
+ zz_recycleL1RequestQueue;
+ }
transition(MT_IIB, Unblock, MT_IB) {
nnu_addSharerFromUnblock;
@@ -1015,21 +1021,22 @@
o_popIncomingResponseQueue;
}
+ transition(MCT_I, {L1_PUTX, L1_PUTX_old}){
+ zz_recycleL1RequestQueue;
+ }
+
// L1 never changed Dirty data
transition(MT_I, Ack_all, M_I) {
ct_exclusiveReplacementFromTBE;
o_popIncomingResponseQueue;
}
-
- // drop this because L1 will send data again
- // the reason we don't accept is that the request virtual network may be
completely backed up
- // transition(MT_I, L1_PUTX) {
- // jj_popL1RequestQueue;
- //}
+ transition(MT_I, {L1_PUTX, L1_PUTX_old}){
+ zz_recycleL1RequestQueue;
+ }
// possible race between unblock and immediate replacement
- transition(MT_MB, {L1_PUTX, L1_PUTX_old}) {
+ transition({MT_MB,SS_MB}, {L1_PUTX, L1_PUTX_old}) {
zz_recycleL1RequestQueue;
}
_______________________________________________
m5-dev mailing list
[email protected]
http://m5sim.org/mailman/listinfo/m5-dev