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>
diff --git a/src/arch/x86/pagetable.hh b/src/arch/x86/pagetable.hh
index 354fb5a..490a259 100644
--- a/src/arch/x86/pagetable.hh
+++ b/src/arch/x86/pagetable.hh
@@ -179,14 +179,6 @@
             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)
         {
diff --git a/src/arch/x86/process.cc b/src/arch/x86/process.cc
index 627750c..0a94ac4 100644
--- a/src/arch/x86/process.cc
+++ b/src/arch/x86/process.cc
@@ -100,9 +100,11 @@
                        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),
diff --git a/src/mem/multi_level_page_table.hh b/src/mem/multi_level_page_table.hh
index f71dc0d..7cbbd8c 100644
--- a/src/mem/multi_level_page_table.hh
+++ b/src/mem/multi_level_page_table.hh
@@ -140,7 +140,8 @@
 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;
diff --git a/src/mem/multi_level_page_table_impl.hh b/src/mem/multi_level_page_table_impl.hh
index 2d7ddc4..3356c9e 100644
--- a/src/mem/multi_level_page_table_impl.hh
+++ b/src/mem/multi_level_page_table_impl.hh
@@ -47,10 +47,9 @@
 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 @@
 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 */