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 Reviewed-on: https://gem5-review.googlesource.com/9302 Reviewed-by: Nikos Nikoleris <nikos.nikoleris@arm.com> Maintainer: Nikos Nikoleris <nikos.nikoleris@arm.com>
This commit is contained in:
committed by
Daniel Carvalho
parent
c2d03ba24f
commit
83f88cd1c0
3
src/mem/cache/tags/base.cc
vendored
3
src/mem/cache/tags/base.cc
vendored
@@ -63,7 +63,8 @@ BaseTags::BaseTags(const Params *p)
|
||||
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
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
3
src/mem/cache/tags/base.hh
vendored
3
src/mem/cache/tags/base.hh
vendored
@@ -94,6 +94,9 @@ class BaseTags : public ClockedObject
|
||||
/** 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.
|
||||
|
||||
1
src/mem/cache/tags/base_set_assoc.cc
vendored
1
src/mem/cache/tags/base_set_assoc.cc
vendored
@@ -57,7 +57,6 @@ using namespace std;
|
||||
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)),
|
||||
|
||||
3
src/mem/cache/tags/base_set_assoc.hh
vendored
3
src/mem/cache/tags/base_set_assoc.hh
vendored
@@ -76,7 +76,6 @@ class BaseSetAssoc : public BaseTags
|
||||
/** 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 @@ class BaseSetAssoc : public BaseTags
|
||||
|
||||
/** 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;
|
||||
|
||||
5
src/mem/cache/tags/fa_lru.cc
vendored
5
src/mem/cache/tags/fa_lru.cc
vendored
@@ -80,10 +80,12 @@ FALRU::FALRU(const Params *p)
|
||||
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)*blkSize];
|
||||
|
||||
unsigned index = (1 << 17) / blkSize;
|
||||
unsigned j = 0;
|
||||
@@ -100,6 +102,9 @@ FALRU::FALRU(const Params *p)
|
||||
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);
|
||||
|
||||
Reference in New Issue
Block a user