diff --git a/src/sim/mem_pool.cc b/src/sim/mem_pool.cc index f568e28a4a..bde3e67b91 100644 --- a/src/sim/mem_pool.cc +++ b/src/sim/mem_pool.cc @@ -39,9 +39,17 @@ namespace gem5 { MemPool::MemPool(Addr page_shift, Addr ptr, Addr limit) - : pageShift(page_shift), freePageNum(ptr >> page_shift), - _totalPages(limit >> page_shift) + : pageShift(page_shift), startPageNum(ptr >> page_shift), + freePageNum(ptr >> page_shift), + _totalPages((limit - ptr) >> page_shift) { + gem5_assert(_totalPages > 0); +} + +Counter +MemPool::startPage() const +{ + return startPageNum; } Counter @@ -71,13 +79,19 @@ MemPool::totalPages() const Counter MemPool::allocatedPages() const { - return freePageNum; + return freePageNum - startPageNum; } Counter MemPool::freePages() const { - return _totalPages - freePageNum; + return _totalPages - allocatedPages(); +} + +Addr +MemPool::startAddr() const +{ + return startPage() << pageShift; } Addr diff --git a/src/sim/mem_pool.hh b/src/sim/mem_pool.hh index 49523f4e10..3cba3b6987 100644 --- a/src/sim/mem_pool.hh +++ b/src/sim/mem_pool.hh @@ -47,7 +47,10 @@ class MemPool private: Addr pageShift; - /** Page number to free memory. */ + /** Start page of pool. */ + Counter startPageNum; + + /** Page number of free memory. */ Counter freePageNum; /** The size of the pool, in number of pages. */ @@ -56,6 +59,7 @@ class MemPool public: MemPool(Addr page_shift, Addr ptr, Addr limit); + Counter startPage() const; Counter freePage() const; void setFreePage(Counter value); Addr freePageAddr() const; @@ -64,6 +68,7 @@ class MemPool Counter allocatedPages() const; Counter freePages() const; + Addr startAddr() const; Addr allocatedBytes() const; Addr freeBytes() const; Addr totalBytes() const; diff --git a/src/sim/system.cc b/src/sim/system.cc index 38952762b1..225262a4ab 100644 --- a/src/sim/system.cc +++ b/src/sim/system.cc @@ -435,7 +435,7 @@ System::serialize(CheckpointOut &cp) const for (const auto& memPool : memPools) { ptrs.push_back(memPool.freePageAddr()); - limits.push_back(memPool.totalBytes()); + limits.push_back(memPool.totalBytes() + memPool.startAddr()); } SERIALIZE_CONTAINER(ptrs);