mem: Cycles converted to Ticks in atomic cache accesses
authorAndreas Hansson <andreas.hansson@arm.com>
Thu, 27 Jun 2013 09:49:49 +0000 (05:49 -0400)
committerAndreas Hansson <andreas.hansson@arm.com>
Thu, 27 Jun 2013 09:49:49 +0000 (05:49 -0400)
This patch fixes an outstanding issue in the cache timing calculations
where an atomic access returned a time in Cycles, but the port
forwarded it on as if it was in Ticks.

A separate patch will update the regression stats.

src/mem/cache/cache.hh
src/mem/cache/cache_impl.hh

index d27dfc5e260a492768daa269aed466e826599b10..de98398d6573ad23ce89db11cda989d19edbe090 100644 (file)
@@ -263,17 +263,17 @@ class Cache : public BaseCache
     /**
      * Performs the access specified by the request.
      * @param pkt The request to perform.
-     * @return The number of cycles required for the access.
+     * @return The number of ticks required for the access.
      */
-    Cycles recvAtomic(PacketPtr pkt);
+    Tick recvAtomic(PacketPtr pkt);
 
     /**
      * Snoop for the provided request in the cache and return the estimated
-     * time of completion.
+     * time taken.
      * @param pkt The memory request to snoop
-     * @return The number of cycles required for the snoop.
+     * @return The number of ticks required for the snoop.
      */
-    Cycles recvAtomicSnoop(PacketPtr pkt);
+    Tick recvAtomicSnoop(PacketPtr pkt);
 
     /**
      * Performs the access specified by the request.
index 60b72b521b3286aefff3b38da17bd88858db831e..f697f84e4c7005be472b7f29f6f24f38ce4302b5 100644 (file)
@@ -644,7 +644,7 @@ Cache<TagStore>::getBusPacket(PacketPtr cpu_pkt, BlkType *blk,
 
 
 template<class TagStore>
-Cycles
+Tick
 Cache<TagStore>::recvAtomic(PacketPtr pkt)
 {
     Cycles lat = hitLatency;
@@ -678,7 +678,7 @@ Cache<TagStore>::recvAtomic(PacketPtr pkt)
                     pkt->cmdString(), pkt->getAddr());
         }
 
-        return lat;
+        return lat * clockPeriod();
     }
 
     // should assert here that there are no outstanding MSHRs or
@@ -763,7 +763,7 @@ Cache<TagStore>::recvAtomic(PacketPtr pkt)
         pkt->makeAtomicResponse();
     }
 
-    return lat;
+    return lat * clockPeriod();
 }
 
 
@@ -1510,7 +1510,7 @@ Cache<TagStore>::CpuSidePort::recvTimingSnoopResp(PacketPtr pkt)
 }
 
 template<class TagStore>
-Cycles
+Tick
 Cache<TagStore>::recvAtomicSnoop(PacketPtr pkt)
 {
     // Snoops shouldn't happen when bypassing caches
@@ -1519,12 +1519,12 @@ Cache<TagStore>::recvAtomicSnoop(PacketPtr pkt)
     if (pkt->req->isUncacheable() || pkt->cmd == MemCmd::Writeback) {
         // Can't get a hit on an uncacheable address
         // Revisit this for multi level coherence
-        return hitLatency;
+        return 0;
     }
 
     BlkType *blk = tags->findBlock(pkt->getAddr());
     handleSnoop(pkt, blk, false, false, false);
-    return hitLatency;
+    return hitLatency * clockPeriod();
 }
 
 
@@ -1777,8 +1777,6 @@ template<class TagStore>
 Tick
 Cache<TagStore>::CpuSidePort::recvAtomic(PacketPtr pkt)
 {
-    // @todo: Note that this is currently using cycles instead of
-    // ticks and will be fixed in a future patch
     return cache->recvAtomic(pkt);
 }
 
@@ -1825,8 +1823,6 @@ template<class TagStore>
 Tick
 Cache<TagStore>::MemSidePort::recvAtomicSnoop(PacketPtr pkt)
 {
-    // @todo: Note that this is using cycles and not ticks and will be
-    // fixed in a future patch
     return cache->recvAtomicSnoop(pkt);
 }