Daniel Carvalho has uploaded this change for review. ( https://gem5-review.googlesource.com/9302

Change subject: mem-cache: Fix FALRU data block seg fault
......................................................................

mem-cache: Fix FALRU data block seg fault

FALRU didn't initialize the blocks' data, causing seg faults.
This patch does not make FALRU functional yet.

Change-Id: I10cbcf5afc3f8bc357eeb8b7cb46789dec47ba8b
---
M src/mem/cache/tags/base.cc
M src/mem/cache/tags/base.hh
M src/mem/cache/tags/base_set_assoc.cc
M src/mem/cache/tags/base_set_assoc.hh
M src/mem/cache/tags/fa_lru.cc
5 files changed, 10 insertions(+), 5 deletions(-)



diff --git a/src/mem/cache/tags/base.cc b/src/mem/cache/tags/base.cc
index 8b52b74..d2d6e8e 100644
--- a/src/mem/cache/tags/base.cc
+++ b/src/mem/cache/tags/base.cc
@@ -63,7 +63,8 @@
                     std::max(p->tag_latency, p->data_latency)),
       cache(nullptr),
warmupBound((p->warmup_percentage/100.0) * (p->size / p->block_size)),
-      warmedUp(false), numBlocks(p->size / p->block_size)
+      warmedUp(false), numBlocks(p->size / p->block_size),
+ dataBlks(new uint8_t[p->size]) // Allocate data storage in one big chunk
 {
 }

diff --git a/src/mem/cache/tags/base.hh b/src/mem/cache/tags/base.hh
index 74fc7e0..3370de2 100644
--- a/src/mem/cache/tags/base.hh
+++ b/src/mem/cache/tags/base.hh
@@ -94,6 +94,9 @@
     /** the number of blocks in the cache */
     const unsigned numBlocks;

+    /** The data blocks, 1 per cache block. */
+    std::unique_ptr<uint8_t[]> dataBlks;
+
     // Statistics
     /**
      * TODO: It would be good if these stats were acquired after warmup.
diff --git a/src/mem/cache/tags/base_set_assoc.cc b/src/mem/cache/tags/base_set_assoc.cc
index 2475e6f..0ab806e 100644
--- a/src/mem/cache/tags/base_set_assoc.cc
+++ b/src/mem/cache/tags/base_set_assoc.cc
@@ -57,7 +57,6 @@
 BaseSetAssoc::BaseSetAssoc(const Params *p)
     :BaseTags(p), assoc(p->assoc), allocAssoc(p->assoc),
      blks(p->size / p->block_size),
- dataBlks(new uint8_t[p->size]), // Allocate data storage in one big chunk
      numSets(p->size / (p->block_size * p->assoc)),
      sequentialAccess(p->sequential_access),
      sets(p->size / (p->block_size * p->assoc)),
diff --git a/src/mem/cache/tags/base_set_assoc.hh b/src/mem/cache/tags/base_set_assoc.hh
index f7b386a..3bc275b 100644
--- a/src/mem/cache/tags/base_set_assoc.hh
+++ b/src/mem/cache/tags/base_set_assoc.hh
@@ -76,7 +76,6 @@
     /** Typedef the set type used in this tag store. */
     typedef CacheSet<CacheBlk> SetType;

-
   protected:
     /** The associativity of the cache. */
     const unsigned assoc;
@@ -85,8 +84,6 @@

     /** The cache blocks. */
     std::vector<BlkType> blks;
-    /** The data blocks, 1 per cache block. */
-    std::unique_ptr<uint8_t[]> dataBlks;

     /** The number of sets in the cache. */
     const unsigned numSets;
diff --git a/src/mem/cache/tags/fa_lru.cc b/src/mem/cache/tags/fa_lru.cc
index a38d0bf..29e77b8 100644
--- a/src/mem/cache/tags/fa_lru.cc
+++ b/src/mem/cache/tags/fa_lru.cc
@@ -80,10 +80,12 @@
     head->prev = nullptr;
     head->next = &(blks[1]);
     head->inCache = cacheMask;
+    head->data = &dataBlks[0];

     tail->prev = &(blks[numBlocks-2]);
     tail->next = nullptr;
     tail->inCache = 0;
+    tail->data = &dataBlks[numBlocks-1];

     unsigned index = (1 << 17) / blkSize;
     unsigned j = 0;
@@ -100,6 +102,9 @@
         blks[i].next = &(blks[i+1]);
         blks[i].set = 0;
         blks[i].way = i;
+
+        // Associate a data chunk to the block
+        blks[i].data = &dataBlks[blkSize*i];
     }
     assert(j == numCaches);
     assert(index == numBlocks);

--
To view, visit https://gem5-review.googlesource.com/9302
To unsubscribe, or for help writing mail filters, visit https://gem5-review.googlesource.com/settings

Gerrit-Project: public/gem5
Gerrit-Branch: master
Gerrit-Change-Id: I10cbcf5afc3f8bc357eeb8b7cb46789dec47ba8b
Gerrit-Change-Number: 9302
Gerrit-PatchSet: 1
Gerrit-Owner: Daniel Carvalho <[email protected]>
Gerrit-MessageType: newchange
_______________________________________________
gem5-dev mailing list
[email protected]
http://m5sim.org/mailman/listinfo/gem5-dev

Reply via email to