diff options
author | Daniel R. Carvalho <odanrc@yahoo.com.br> | 2019-07-30 09:41:14 +0200 |
---|---|---|
committer | Daniel Carvalho <odanrc@yahoo.com.br> | 2019-07-31 08:21:52 +0000 |
commit | afc30c07f598a8dd45ea4bc458f89d3485c50025 (patch) | |
tree | f0dc1b28fca8668f9bd7a15de53012684b8d0372 | |
parent | 55580e6a8810e9d31b01a2efdf58b13d09f30f58 (diff) | |
download | gem5-afc30c07f598a8dd45ea4bc458f89d3485c50025.tar.xz |
mem-cache: Fix set and way of sub-entries
Set and way of sub-entries were not being set previously.
They must be set after the sub-blocks have been assigned
to the main block.
Change-Id: I7b6921b8437b29c472d691cd78cf20f2bb6c7e07
Signed-off-by: Daniel R. Carvalho <odanrc@yahoo.com.br>
Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/19669
Reviewed-by: Nikos Nikoleris <nikos.nikoleris@arm.com>
Maintainer: Nikos Nikoleris <nikos.nikoleris@arm.com>
Tested-by: kokoro <noreply+kokoro@google.com>
-rw-r--r-- | src/mem/cache/replacement_policies/replaceable_entry.hh | 4 | ||||
-rw-r--r-- | src/mem/cache/tags/compressed_tags.cc | 6 | ||||
-rw-r--r-- | src/mem/cache/tags/sector_blk.cc | 9 | ||||
-rw-r--r-- | src/mem/cache/tags/sector_blk.hh | 8 | ||||
-rw-r--r-- | src/mem/cache/tags/sector_tags.cc | 6 |
5 files changed, 26 insertions, 7 deletions
diff --git a/src/mem/cache/replacement_policies/replaceable_entry.hh b/src/mem/cache/replacement_policies/replaceable_entry.hh index bf54e2264..dffa4cf10 100644 --- a/src/mem/cache/replacement_policies/replaceable_entry.hh +++ b/src/mem/cache/replacement_policies/replaceable_entry.hh @@ -76,7 +76,9 @@ class ReplaceableEntry * @param set The set of this entry. * @param way The way of this entry. */ - void setPosition(const uint32_t set, const uint32_t way) { + virtual void + setPosition(const uint32_t set, const uint32_t way) + { _set = set; _way = way; } diff --git a/src/mem/cache/tags/compressed_tags.cc b/src/mem/cache/tags/compressed_tags.cc index 0896a1b9a..1394be855 100644 --- a/src/mem/cache/tags/compressed_tags.cc +++ b/src/mem/cache/tags/compressed_tags.cc @@ -67,9 +67,6 @@ CompressedTags::tagsInit() // allocation conditions superblock->setBlkSize(blkSize); - // Link block to indexing policy - indexingPolicy->setEntry(superblock, superblock_index); - // Associate a replacement data entry to the block superblock->replacementData = replacementPolicy->instantiateEntry(); @@ -97,6 +94,9 @@ CompressedTags::tagsInit() // Update block index ++blk_index; } + + // Link block to indexing policy + indexingPolicy->setEntry(superblock, superblock_index); } } diff --git a/src/mem/cache/tags/sector_blk.cc b/src/mem/cache/tags/sector_blk.cc index 93b1961d8..7e4468dc3 100644 --- a/src/mem/cache/tags/sector_blk.cc +++ b/src/mem/cache/tags/sector_blk.cc @@ -167,3 +167,12 @@ SectorBlk::setSecure() { _secureBit = true; } + +void +SectorBlk::setPosition(const uint32_t set, const uint32_t way) +{ + ReplaceableEntry::setPosition(set, way); + for (auto& blk : blks) { + blk->setPosition(set, way); + } +} diff --git a/src/mem/cache/tags/sector_blk.hh b/src/mem/cache/tags/sector_blk.hh index ca0d9a806..a30fb817c 100644 --- a/src/mem/cache/tags/sector_blk.hh +++ b/src/mem/cache/tags/sector_blk.hh @@ -214,6 +214,14 @@ class SectorBlk : public ReplaceableEntry * Set secure bit. */ void setSecure(); + + /** + * Sets the position of the sub-entries, besides its own. + * + * @param set The set of this entry and sub-entries. + * @param way The way of this entry and sub-entries. + */ + void setPosition(const uint32_t set, const uint32_t way) override; }; #endif //__MEM_CACHE_TAGS_SECTOR_BLK_HH__ diff --git a/src/mem/cache/tags/sector_tags.cc b/src/mem/cache/tags/sector_tags.cc index 535badb8d..1098885c2 100644 --- a/src/mem/cache/tags/sector_tags.cc +++ b/src/mem/cache/tags/sector_tags.cc @@ -77,9 +77,6 @@ SectorTags::tagsInit() // Locate next cache sector SectorBlk* sec_blk = &secBlks[sec_blk_index]; - // Link block to indexing policy - indexingPolicy->setEntry(sec_blk, sec_blk_index); - // Associate a replacement data entry to the sector sec_blk->replacementData = replacementPolicy->instantiateEntry(); @@ -107,6 +104,9 @@ SectorTags::tagsInit() // Update block index ++blk_index; } + + // Link block to indexing policy + indexingPolicy->setEntry(sec_blk, sec_blk_index); } } |