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:
@@ -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
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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");
|
||||
|
||||
Reference in New Issue
Block a user