summaryrefslogtreecommitdiff
path: root/src/mem/protocol/MESI_CMP_directory-L1cache.sm
diff options
context:
space:
mode:
authorNilay Vaish <nilay@cs.wisc.edu>2011-01-13 22:17:11 -0600
committerNilay Vaish <nilay@cs.wisc.edu>2011-01-13 22:17:11 -0600
commit47ba26f6b31497ed79703c5cad3270d7ee72512b (patch)
treee7f9f2449101685509173e15f7f4e15a5902c473 /src/mem/protocol/MESI_CMP_directory-L1cache.sm
parent43b58ce3adbd827d9dabfcb117e4ad74ddd911d8 (diff)
downloadgem5-47ba26f6b31497ed79703c5cad3270d7ee72512b.tar.xz
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 (limited to 'src/mem/protocol/MESI_CMP_directory-L1cache.sm')
-rw-r--r--src/mem/protocol/MESI_CMP_directory-L1cache.sm25
1 files changed, 19 insertions, 6 deletions
diff --git a/src/mem/protocol/MESI_CMP_directory-L1cache.sm b/src/mem/protocol/MESI_CMP_directory-L1cache.sm
index fb78623cd..50e0c3662 100644
--- a/src/mem/protocol/MESI_CMP_directory-L1cache.sm
+++ b/src/mem/protocol/MESI_CMP_directory-L1cache.sm
@@ -70,6 +70,7 @@ machine(L1Cache, "MSI Directory L1 Cache CMP")
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 @@ machine(L1Cache, "MSI Directory L1 Cache CMP")
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 @@ machine(L1Cache, "MSI Directory L1 Cache CMP")
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 @@ machine(L1Cache, "MSI Directory L1 Cache CMP")
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;
+ }
}