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 m5-dev@m5sim.org http://m5sim.org/mailman/listinfo/m5-dev