mem-ruby: Use check_on_cache_probe on MI
authorPouya Fotouhi <Pouya.Fotouhi@amd.com>
Thu, 8 Aug 2019 00:48:49 +0000 (19:48 -0500)
committerPouya Fotouhi <pfotouhi@ucdavis.edu>
Tue, 13 Aug 2019 00:52:27 +0000 (00:52 +0000)
This change uses check_on_cache_probe statement to check if the cacheline
subject to eviction is locked in MI.

Change-Id: I276822e987e52f7682ff30f55880f295b6af023d
Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/19888
Tested-by: kokoro <noreply+kokoro@google.com>
Reviewed-by: Jason Lowe-Power <jason@lowepower.com>
Maintainer: Jason Lowe-Power <jason@lowepower.com>

src/mem/protocol/MI_example-cache.sm

index b8036c12302b328abccd25242113b49a0f6dcea1..8738f336eaaed5879bc87b9a2f7c05832bf4a7c3 100644 (file)
@@ -254,9 +254,12 @@ machine(MachineType:L1Cache, "MI Example L1 Cache")
         if (is_invalid(cache_entry) &&
             cacheMemory.cacheAvail(in_msg.LineAddress) == false ) {
           // make room for the block
-          trigger(Event:Replacement, cacheMemory.cacheProbe(in_msg.LineAddress),
-                  getCacheEntry(cacheMemory.cacheProbe(in_msg.LineAddress)),
-                  TBEs[cacheMemory.cacheProbe(in_msg.LineAddress)]);
+          // Check if the line we want to evict is not locked
+          Addr addr := cacheMemory.cacheProbe(in_msg.LineAddress);
+          check_on_cache_probe(mandatoryQueue_in, addr);
+          trigger(Event:Replacement, addr,
+                  getCacheEntry(addr),
+                  TBEs[addr]);
         }
         else {
           trigger(mandatory_request_type_to_event(in_msg.Type), in_msg.LineAddress,