summaryrefslogtreecommitdiff
path: root/src/mem
diff options
context:
space:
mode:
Diffstat (limited to 'src/mem')
-rw-r--r--src/mem/multi_level_page_table.hh7
-rw-r--r--src/mem/multi_level_page_table_impl.hh18
2 files changed, 12 insertions, 13 deletions
diff --git a/src/mem/multi_level_page_table.hh b/src/mem/multi_level_page_table.hh
index 7cbbd8c0e..30f534706 100644
--- a/src/mem/multi_level_page_table.hh
+++ b/src/mem/multi_level_page_table.hh
@@ -115,7 +115,7 @@ class MultiLevelPageTable : public EmulationPageTable
/**
* Physical address to the last level of the page table
*/
- Addr basePtr;
+ Addr _basePtr;
/**
* Vector with sizes of all levels in base 2 logarithmic
@@ -140,12 +140,13 @@ class MultiLevelPageTable : public EmulationPageTable
public:
MultiLevelPageTable(const std::string &__name, uint64_t _pid,
System *_sys, Addr pageSize,
- const std::vector<uint8_t> &layout,
- Addr _basePtr);
+ const std::vector<uint8_t> &layout);
~MultiLevelPageTable();
void initState(ThreadContext* tc) override;
+ Addr basePtr() { return _basePtr; }
+
void map(Addr vaddr, Addr paddr, int64_t size,
uint64_t flags = 0) override;
void remap(Addr vaddr, int64_t size, Addr new_vaddr) override;
diff --git a/src/mem/multi_level_page_table_impl.hh b/src/mem/multi_level_page_table_impl.hh
index 3356c9ea2..d756de658 100644
--- a/src/mem/multi_level_page_table_impl.hh
+++ b/src/mem/multi_level_page_table_impl.hh
@@ -47,9 +47,9 @@ using namespace TheISA;
template <class ISAOps>
MultiLevelPageTable<ISAOps>::MultiLevelPageTable(
const std::string &__name, uint64_t _pid, System *_sys,
- Addr pageSize, const std::vector<uint8_t> &layout, Addr _basePtr)
+ Addr pageSize, const std::vector<uint8_t> &layout)
: EmulationPageTable(__name, _pid, pageSize), system(_sys),
- basePtr(_basePtr), logLevelSize(layout), numLevels(logLevelSize.size())
+ logLevelSize(layout), numLevels(logLevelSize.size())
{
}
@@ -62,18 +62,16 @@ template <class ISAOps>
void
MultiLevelPageTable<ISAOps>::initState(ThreadContext* tc)
{
- system->pagePtr = basePtr;
-
/* setting first level of the page table */
uint64_t log_req_size = floorLog2(sizeof(PageTableEntry)) +
- logLevelSize[numLevels-1];
+ logLevelSize[numLevels - 1];
assert(log_req_size >= PageShift);
uint64_t npages = 1 << (log_req_size - PageShift);
- Addr paddr = system->allocPhysPages(npages);
+ Addr _basePtr = system->allocPhysPages(npages);
PortProxy &p = system->physProxy;
- p.memsetBlob(paddr, 0, npages << PageShift);
+ p.memsetBlob(_basePtr, 0, npages << PageShift);
}
@@ -83,7 +81,7 @@ MultiLevelPageTable<ISAOps>::walk(Addr vaddr, bool allocate, Addr &PTE_addr)
{
std::vector<uint64_t> offsets = pTableISAOps.getOffsets(vaddr);
- Addr level_base = basePtr;
+ Addr level_base = _basePtr;
for (int i = numLevels - 1; i > 0; i--) {
Addr entry_addr = (level_base<<PageShift) +
@@ -221,7 +219,7 @@ MultiLevelPageTable<ISAOps>::serialize(CheckpointOut &cp) const
* which is serialized separately, we will serialize
* just the base pointer
*/
- paramOut(cp, "ptable.pointer", basePtr);
+ paramOut(cp, "ptable.pointer", _basePtr);
}
template <class ISAOps>
@@ -229,5 +227,5 @@ void
MultiLevelPageTable<ISAOps>::unserialize(CheckpointIn &cp)
{
EmulationPageTable::unserialize(cp);
- paramIn(cp, "ptable.pointer", basePtr);
+ paramIn(cp, "ptable.pointer", _basePtr);
}