x86, mem: Get rid of PageTableOps::getBasePtr.
Pass this constant into the page table constructor. Change-Id: Icbf730f18d9dfcfebd10a196f7f799514728b0fb Reviewed-on: https://gem5-review.googlesource.com/7345 Maintainer: Gabe Black <gabeblack@google.com> Reviewed-by: Brandon Potter <Brandon.Potter@amd.com>
This commit is contained in:
@@ -179,14 +179,6 @@ namespace X86ISA
|
||||
PTE.u = flags & PTE_Supervisor ? 0 : 1;
|
||||
}
|
||||
|
||||
/** returns the physical memory address of the page table */
|
||||
Addr getBasePtr(ThreadContext* tc)
|
||||
{
|
||||
CR3 cr3 = pageTablePhysAddr;
|
||||
DPRINTF(MMU, "CR3: %d\n", cr3);
|
||||
return cr3.longPdtb;
|
||||
}
|
||||
|
||||
/** returns the page number out of a page table entry */
|
||||
Addr getPnum(PageTableEntry PTE)
|
||||
{
|
||||
|
||||
@@ -100,9 +100,11 @@ X86Process::X86Process(ProcessParams *params, ObjectFile *objFile,
|
||||
SyscallDesc *_syscallDescs, int _numSyscallDescs)
|
||||
: Process(params, params->useArchPT ?
|
||||
static_cast<EmulationPageTable *>(
|
||||
new ArchPageTable(params->name, params->pid,
|
||||
params->system, PageBytes,
|
||||
PageTableLayout)) :
|
||||
new ArchPageTable(
|
||||
params->name, params->pid,
|
||||
params->system, PageBytes,
|
||||
PageTableLayout,
|
||||
pageTablePhysAddr >> PageShift)) :
|
||||
new EmulationPageTable(params->name, params->pid,
|
||||
PageBytes),
|
||||
objFile),
|
||||
|
||||
@@ -140,7 +140,8 @@ class MultiLevelPageTable : public EmulationPageTable
|
||||
public:
|
||||
MultiLevelPageTable(const std::string &__name, uint64_t _pid,
|
||||
System *_sys, Addr pageSize,
|
||||
const std::vector<uint8_t> &layout);
|
||||
const std::vector<uint8_t> &layout,
|
||||
Addr _basePtr);
|
||||
~MultiLevelPageTable();
|
||||
|
||||
void initState(ThreadContext* tc) override;
|
||||
|
||||
@@ -47,10 +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 pageSize, const std::vector<uint8_t> &layout, Addr _basePtr)
|
||||
: EmulationPageTable(__name, _pid, pageSize), system(_sys),
|
||||
logLevelSize(layout),
|
||||
numLevels(logLevelSize.size())
|
||||
basePtr(_basePtr), logLevelSize(layout), numLevels(logLevelSize.size())
|
||||
{
|
||||
}
|
||||
|
||||
@@ -63,11 +62,6 @@ template <class ISAOps>
|
||||
void
|
||||
MultiLevelPageTable<ISAOps>::initState(ThreadContext* tc)
|
||||
{
|
||||
basePtr = pTableISAOps.getBasePtr(tc);
|
||||
if (basePtr == 0)
|
||||
basePtr++;
|
||||
DPRINTF(MMU, "basePtr: %d\n", basePtr);
|
||||
|
||||
system->pagePtr = basePtr;
|
||||
|
||||
/* setting first level of the page table */
|
||||
|
||||
Reference in New Issue
Block a user