X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;ds=sidebyside;f=src%2Fmem%2Fpage_table.hh;h=0e2b1f58c8695841620175a8a97dbba930aeac77;hb=f720029e97358b2f69ea0ecaace89d5c2ccc6bfe;hp=f7212d42311a1616e8e5f90bb8d6d88b9bf0320b;hpb=3c95f5958fd1a90cf83d85e1b24fb700c07bae91;p=gem5.git diff --git a/src/mem/page_table.hh b/src/mem/page_table.hh index f7212d423..0e2b1f58c 100644 --- a/src/mem/page_table.hh +++ b/src/mem/page_table.hh @@ -37,9 +37,10 @@ #define __PAGE_TABLE__ #include -#include +#include "sim/faults.hh" #include "arch/isa_traits.hh" +#include "base/hashmap.hh" #include "base/trace.hh" #include "mem/request.hh" #include "mem/packet.hh" @@ -48,12 +49,19 @@ class System; /** - * Page Table Decleration. + * Page Table Declaration. */ class PageTable { protected: - std::map pTable; + m5::hash_map pTable; + + struct cacheElement { + Addr paddr; + Addr vaddr; + } ; + + struct cacheElement pTableCache[3]; const Addr pageSize; const Addr offsetMask; @@ -69,9 +77,9 @@ class PageTable Addr pageAlign(Addr a) { return (a & ~offsetMask); } Addr pageOffset(Addr a) { return (a & offsetMask); } - Fault page_check(Addr addr, int size) const; + Fault page_check(Addr addr, int64_t size) const; - void allocate(Addr vaddr, int size); + void allocate(Addr vaddr, int64_t size); /** * Translate function @@ -87,6 +95,8 @@ class PageTable */ Fault translate(RequestPtr &req); + void serialize(std::ostream &os); + void unserialize(Checkpoint *cp, const std::string §ion); }; #endif