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 <matthew.poremba@amd.com>
Maintainer: Gabe Black <gabe.black@gmail.com>
Tested-by: kokoro <noreply+kokoro@google.com>
This commit is contained in:
Gabe Black
2021-09-11 05:25:56 -07:00
parent 6d9cbb9d6e
commit 4d398302c4
3 changed files with 14 additions and 13 deletions

View File

@@ -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

View File

@@ -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);

View File

@@ -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");