From 4d398302c41b402cea25fd46f7e9c4bbb4d89fa2 Mon Sep 17 00:00:00 2001 From: Gabe Black Date: Sat, 11 Sep 2021 05:25:56 -0700 Subject: [PATCH] sim: Make the page shift a member of the MemPool class. Pass it in through the constructor, rather than have the MemPool call into the System object every time it needs the page shift. This is simpler, more efficient, and removes a dependency between the MemPool class and the System class. Change-Id: I059bcb0db249251b32bff1beba3eadfe306d9081 Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/50339 Reviewed-by: Matthew Poremba Maintainer: Gabe Black Tested-by: kokoro --- src/sim/mem_pool.cc | 16 ++++++++-------- src/sim/mem_pool.hh | 4 ++-- src/sim/system.cc | 7 ++++--- 3 files changed, 14 insertions(+), 13 deletions(-) diff --git a/src/sim/mem_pool.cc b/src/sim/mem_pool.cc index 2614ad5ff8..f568e28a4a 100644 --- a/src/sim/mem_pool.cc +++ b/src/sim/mem_pool.cc @@ -33,14 +33,14 @@ #include "sim/mem_pool.hh" -#include "sim/system.hh" +#include "base/logging.hh" namespace gem5 { -MemPool::MemPool(System *system, Addr ptr, Addr limit) - : sys(system), freePageNum(ptr >> sys->getPageShift()), - _totalPages(limit >> sys->getPageShift()) +MemPool::MemPool(Addr page_shift, Addr ptr, Addr limit) + : pageShift(page_shift), freePageNum(ptr >> page_shift), + _totalPages(limit >> page_shift) { } @@ -59,7 +59,7 @@ MemPool::setFreePage(Counter value) Addr MemPool::freePageAddr() const { - return freePageNum << sys->getPageShift(); + return freePageNum << pageShift; } Counter @@ -83,19 +83,19 @@ MemPool::freePages() const Addr MemPool::allocatedBytes() const { - return allocatedPages() << sys->getPageShift(); + return allocatedPages() << pageShift; } Addr MemPool::freeBytes() const { - return freePages() << sys->getPageShift(); + return freePages() << pageShift; } Addr MemPool::totalBytes() const { - return totalPages() << sys->getPageShift(); + return totalPages() << pageShift; } Addr diff --git a/src/sim/mem_pool.hh b/src/sim/mem_pool.hh index e8bd439156..49523f4e10 100644 --- a/src/sim/mem_pool.hh +++ b/src/sim/mem_pool.hh @@ -45,7 +45,7 @@ class System; class MemPool { private: - System *sys; + Addr pageShift; /** Page number to free memory. */ Counter freePageNum; @@ -54,7 +54,7 @@ class MemPool Counter _totalPages; public: - MemPool(System *system, Addr ptr, Addr limit); + MemPool(Addr page_shift, Addr ptr, Addr limit); Counter freePage() const; void setFreePage(Counter value); diff --git a/src/sim/system.cc b/src/sim/system.cc index 299ba66873..38952762b1 100644 --- a/src/sim/system.cc +++ b/src/sim/system.cc @@ -236,9 +236,10 @@ System::System(const Params &p) if (_m5opRange.valid()) { // Make sure the m5op range is not included. for (const auto &range: mem.exclude({_m5opRange})) - memPools.emplace_back(this, range.start(), range.end()); + memPools.emplace_back(getPageShift(), + range.start(), range.end()); } else { - memPools.emplace_back(this, mem.start(), mem.end()); + memPools.emplace_back(getPageShift(), mem.start(), mem.end()); } } @@ -468,7 +469,7 @@ System::unserialize(CheckpointIn &cp) assert(ptrs.size() == limits.size()); for (size_t i = 0; i < ptrs.size(); i++) - memPools.emplace_back(this, ptrs[i], limits[i]); + memPools.emplace_back(getPageShift(), ptrs[i], limits[i]); // also unserialize the memories in the system physmem.unserializeSection(cp, "physmem");