mem: Simplify page close checks for adaptive policies
authorRizwana Begum <rb639@drexel.edu>
Thu, 30 Apr 2015 03:35:22 +0000 (22:35 -0500)
committerRizwana Begum <rb639@drexel.edu>
Thu, 30 Apr 2015 03:35:22 +0000 (22:35 -0500)
Both open_adaptive and close_adaptive page polices keep the page
open if a row hit is found. If a row hit is not found, close_adaptive
page policy precharges the row, and open_adaptive policy precharges
the row only if there is a bank conflict request waiting in the queue.

This patch makes the checks for above conditions simpler.

Committed by: Nilay Vaish <nilay@cs.wisc.edu>

src/mem/dram_ctrl.cc

index 23eba158d609304f649364c049495542021c27b6..733a7390f2c0127b7cecc2d713519787e4ff7536 100644 (file)
@@ -1174,11 +1174,12 @@ DRAMCtrl::doDRAMAccess(DRAMPacket* dram_pkt)
         // currently dealing with (which is the head of the queue)
         ++p;
 
-        // keep on looking until we have found required condition or
-        // reached the end
-        while (!(got_more_hits &&
-                 (got_bank_conflict || pageMgmt == Enums::close_adaptive)) &&
-               p != queue.end()) {
+        // keep on looking until we find a hit or reach the end of the queue
+        // 1) if a hit is found, then both open and close adaptive policies keep
+        // the page open
+        // 2) if no hit is found, got_bank_conflict is set to true if a bank
+        // conflict request is waiting in the queue
+        while (!got_more_hits && p != queue.end()) {
             bool same_rank_bank = (dram_pkt->rank == (*p)->rank) &&
                 (dram_pkt->bank == (*p)->bank);
             bool same_row = dram_pkt->row == (*p)->row;