From e2a1dd1f2ae03452af69fff3e1016291002c2bfe Mon Sep 17 00:00:00 2001 From: "Daniel R. Carvalho" Date: Mon, 21 Sep 2020 17:15:40 +0200 Subject: [PATCH] mem-cache: Encapsulate CacheBlk's task_id Encapsulate this variable to facilitate polymorphism. - task_id was renamed to _taskId and was privatized. - The task id should only be modified at 2 specific moments: insertion and invalidation of the block; thus, its setter is not public. Change-Id: If9c49c22117ef5d7f25163ec94bf8b174f221e39 Signed-off-by: Daniel R. Carvalho Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/34956 Reviewed-by: Jason Lowe-Power Reviewed-by: Nikos Nikoleris Maintainer: Nikos Nikoleris Tested-by: kokoro --- src/mem/cache/base.cc | 6 +++--- src/mem/cache/cache.cc | 2 +- src/mem/cache/cache_blk.cc | 2 +- src/mem/cache/cache_blk.hh | 15 +++++++++++---- src/mem/cache/tags/base.cc | 7 ++++--- 5 files changed, 20 insertions(+), 12 deletions(-) diff --git a/src/mem/cache/base.cc b/src/mem/cache/base.cc index c52d2c6c1..4b7333c1e 100644 --- a/src/mem/cache/base.cc +++ b/src/mem/cache/base.cc @@ -1497,7 +1497,7 @@ BaseCache::writebackBlk(CacheBlk *blk) if (blk->isSecure()) req->setFlags(Request::SECURE); - req->taskId(blk->task_id); + req->taskId(blk->getTaskId()); PacketPtr pkt = new Packet(req, blk->isDirty() ? @@ -1539,7 +1539,7 @@ BaseCache::writecleanBlk(CacheBlk *blk, Request::Flags dest, PacketId id) if (blk->isSecure()) { req->setFlags(Request::SECURE); } - req->taskId(blk->task_id); + req->taskId(blk->getTaskId()); PacketPtr pkt = new Packet(req, MemCmd::WriteClean, blkSize, id); @@ -1609,7 +1609,7 @@ BaseCache::writebackVisitor(CacheBlk &blk) RequestPtr request = std::make_shared( regenerateBlkAddr(&blk), blkSize, 0, Request::funcRequestorId); - request->taskId(blk.task_id); + request->taskId(blk.getTaskId()); if (blk.isSecure()) { request->setFlags(Request::SECURE); } diff --git a/src/mem/cache/cache.cc b/src/mem/cache/cache.cc index 4ecda83d7..a46404b69 100644 --- a/src/mem/cache/cache.cc +++ b/src/mem/cache/cache.cc @@ -917,7 +917,7 @@ Cache::cleanEvictBlk(CacheBlk *blk) if (blk->isSecure()) req->setFlags(Request::SECURE); - req->taskId(blk->task_id); + req->taskId(blk->getTaskId()); PacketPtr pkt = new Packet(req, MemCmd::CleanEvict); pkt->allocate(); diff --git a/src/mem/cache/cache_blk.cc b/src/mem/cache/cache_blk.cc index 4b3325ca6..1b44371a2 100644 --- a/src/mem/cache/cache_blk.cc +++ b/src/mem/cache/cache_blk.cc @@ -63,7 +63,7 @@ CacheBlk::insert(const Addr tag, const bool is_secure, srcRequestorId = src_requestor_ID; // Set task ID - task_id = task_ID; + setTaskId(task_ID); // Set insertion tick as current tick tickInserted = curTick(); diff --git a/src/mem/cache/cache_blk.hh b/src/mem/cache/cache_blk.hh index 1de5a818a..77fd4b8f6 100644 --- a/src/mem/cache/cache_blk.hh +++ b/src/mem/cache/cache_blk.hh @@ -85,9 +85,6 @@ enum CacheBlkStatusBits : unsigned { class CacheBlk : public ReplaceableEntry { public: - /** Task Id associated with this block */ - uint32_t task_id; - /** * Contains a copy of the data in this block for easy access. This is used * for efficient execution when the data could be actually stored in @@ -210,7 +207,7 @@ class CacheBlk : public ReplaceableEntry virtual void invalidate() { setTag(MaxAddr); - task_id = ContextSwitchTaskId::Unknown; + setTaskId(ContextSwitchTaskId::Unknown); status = 0; whenReady = MaxTick; refCount = 0; @@ -301,6 +298,9 @@ class CacheBlk : public ReplaceableEntry whenReady = tick; } + /** Get the task id associated to this block. */ + uint32_t getTaskId() const { return _taskId; } + /** * Checks if the given information corresponds to this block's. * @@ -452,9 +452,16 @@ class CacheBlk : public ReplaceableEntry } } + protected: + /** Set the task id value. */ + void setTaskId(const uint32_t task_id) { _taskId = task_id; } + private: /** Data block tag value. */ Addr _tag; + + /** Task Id associated with this block */ + uint32_t _taskId; }; /** diff --git a/src/mem/cache/tags/base.cc b/src/mem/cache/tags/base.cc index 985a1eb4a..19b620029 100644 --- a/src/mem/cache/tags/base.cc +++ b/src/mem/cache/tags/base.cc @@ -148,8 +148,9 @@ void BaseTags::computeStatsVisitor(CacheBlk &blk) { if (blk.isValid()) { - assert(blk.task_id < ContextSwitchTaskId::NumTaskId); - stats.occupanciesTaskId[blk.task_id]++; + const uint32_t task_id = blk.getTaskId(); + assert(task_id < ContextSwitchTaskId::NumTaskId); + stats.occupanciesTaskId[task_id]++; assert(blk.tickInserted <= curTick()); Tick age = curTick() - blk.tickInserted; @@ -165,7 +166,7 @@ BaseTags::computeStatsVisitor(CacheBlk &blk) } else age_index = 4; // >10ms - stats.ageTaskId[blk.task_id][age_index]++; + stats.ageTaskId[task_id][age_index]++; } } -- 2.30.2