diff -r 5fe05690d03d -r 752540bf5605 src/mem/protocol/MOESI_hammer-cache.sm --- a/src/mem/protocol/MOESI_hammer-cache.sm Wed Jul 15 19:53:50 2015 -0500 +++ b/src/mem/protocol/MOESI_hammer-cache.sm Sat Jul 18 14:22:39 2015 -0500 @@ -1233,6 +1233,20 @@ unset_cache_entry(); } + action(gr_deallocateCacheBlock, "\gr", desc="Deallocate an L1 or L2 cache block.") { + if (L1Dcache.isTagPresent(address)) { + L1Dcache.deallocate(address); + } + else if (L1Icache.isTagPresent(address)){ + L1Icache.deallocate(address); + } + else { + assert(L2cache.isTagPresent(address)); + L2cache.deallocate(address); + } + unset_cache_entry(); + } + action(forward_eviction_to_cpu, "\cc", desc="sends eviction information to the processor") { if (send_evictions) { DPRINTF(RubySlicc, "Sending invalidation for %s to the CPU\n", address); @@ -1323,7 +1337,7 @@ } // Transitions moving data between the L1 and L2 caches - transition({I, S, O, M, MM}, L1_to_L2) { + transition({S, O, M, MM}, L1_to_L2) { i_allocateTBE; gg_deallocateL1CacheBlock; vv_allocateL2CacheBlock; @@ -1490,11 +1504,6 @@ k_popMandatoryQueue; } - transition(I, L2_Replacement) { - rr_deallocateL2CacheBlock; - ka_wakeUpAllDependents; - } - transition(I, {Other_GETX, NC_DMA_GETS, Other_GETS, Other_GETS_No_Mig, Invalidate}) { f_sendAck; l_popForwardQueue; @@ -1554,6 +1563,7 @@ transition(S, {Other_GETX, Invalidate}, I) { f_sendAck; forward_eviction_to_cpu; + gr_deallocateCacheBlock; l_popForwardQueue; } @@ -1620,6 +1630,7 @@ transition(O, {Other_GETX, Invalidate}, I) { e_sendData; forward_eviction_to_cpu; + gr_deallocateCacheBlock; l_popForwardQueue; } @@ -1702,12 +1713,14 @@ transition(MM, {Other_GETX, Invalidate}, I) { c_sendExclusiveData; forward_eviction_to_cpu; + gr_deallocateCacheBlock; l_popForwardQueue; } transition(MM, Other_GETS, I) { c_sendExclusiveData; forward_eviction_to_cpu; + gr_deallocateCacheBlock; l_popForwardQueue; } @@ -1768,6 +1781,7 @@ transition(M, {Other_GETX, Invalidate}, I) { c_sendExclusiveData; forward_eviction_to_cpu; + gr_deallocateCacheBlock; l_popForwardQueue; }