ruby: moesi cmp directory: separate actions for external hits
authorNilay Vaish <nilay@cs.wisc.edu>
Tue, 25 Jun 2013 05:32:04 +0000 (00:32 -0500)
committerNilay Vaish <nilay@cs.wisc.edu>
Tue, 25 Jun 2013 05:32:04 +0000 (00:32 -0500)
This patch adds separate actions for requests that missed in the local cache
and messages were sent out to get the requested line. These separate actions
are required for differentiating between the hit and miss latencies in the
statistics collected.

src/mem/protocol/MOESI_CMP_directory-L1cache.sm

index 5b09e220fffad3453b430bbfa289d7735f7d92d5..ec65766930811bdedc5b1afffbc14ea613aaa84d 100644 (file)
@@ -629,6 +629,12 @@ machine(L1Cache, "Directory protocol")
     sequencer.readCallback(address, cache_entry.DataBlk);
   }
 
+  action(hx_load_hit, "hx", desc="Notify sequencer the load completed.") {
+    assert(is_valid(cache_entry));
+    DPRINTF(RubySlicc, "%s\n", cache_entry.DataBlk);
+    sequencer.readCallback(address, cache_entry.DataBlk, true);
+  }
+
   action(hh_store_hit, "\h", desc="Notify sequencer that store completed.") {
     assert(is_valid(cache_entry));
     DPRINTF(RubySlicc, "%s\n", cache_entry.DataBlk);
@@ -636,6 +642,13 @@ machine(L1Cache, "Directory protocol")
     cache_entry.Dirty := true;
   }
 
+  action(xx_store_hit, "\xx", desc="Notify sequencer that store completed.") {
+    assert(is_valid(cache_entry));
+    DPRINTF(RubySlicc, "%s\n", cache_entry.DataBlk);
+    sequencer.writeCallback(address, cache_entry.DataBlk, true);
+    cache_entry.Dirty := true;
+  }
+
   action(i_allocateTBE, "i", desc="Allocate TBE") {
     check_allocate(TBEs);
     TBEs.allocate(address);
@@ -1162,7 +1175,7 @@ machine(L1Cache, "Directory protocol")
   }
 
   transition(OM, All_acks, MM_W) {
-    hh_store_hit;
+    xx_store_hit;
     gg_sendUnblockExclusive;
     s_deallocateTBE;
     o_scheduleUseTimeout;
@@ -1183,7 +1196,7 @@ machine(L1Cache, "Directory protocol")
   transition(IS, Data, S) {
     u_writeDataToCache;
     m_decrementNumberOfMessages;
-    h_load_hit;
+    hx_load_hit;
     g_sendUnblock;
     s_deallocateTBE;
     n_popResponseQueue;
@@ -1192,7 +1205,7 @@ machine(L1Cache, "Directory protocol")
   transition(IS, Exclusive_Data, M_W) {
     u_writeDataToCache;
     m_decrementNumberOfMessages;
-    h_load_hit;
+    hx_load_hit;
     gg_sendUnblockExclusive;
     o_scheduleUseTimeout;
     s_deallocateTBE;