40 #include "debug/MMU.hh" 51 DPRINTF(MMU,
"Allocating Page: %#x-%#x\n", vaddr, vaddr + size);
54 auto it =
pTable.find(vaddr);
58 "EmulationPageTable::allocate: addr %#x already mapped",
60 it->second =
Entry(paddr, flags);
77 DPRINTF(MMU,
"moving pages from vaddr %08p to %08p, size = %d\n", vaddr,
81 auto new_it M5_VAR_USED =
pTable.find(new_vaddr);
82 auto old_it =
pTable.find(vaddr);
83 assert(old_it !=
pTable.end() && new_it ==
pTable.end());
85 pTable.emplace(new_vaddr, old_it->second);
97 addr_maps->push_back(std::make_pair(iter.first, iter.second.paddr));
105 DPRINTF(MMU,
"Unmapping page: %#x-%#x\n", vaddr, vaddr + size);
108 auto it =
pTable.find(vaddr);
109 assert(it !=
pTable.end());
136 return &(iter->second);
144 DPRINTF(MMU,
"Couldn't Translate: %#x\n", vaddr);
148 DPRINTF(MMU,
"Translating: %#x->%#x\n", vaddr, paddr);
156 assert(
pageAlign(req->getVaddr() + req->getSize() - 1) ==
160 req->setPaddr(paddr);
162 panic(
"Request spans page boundaries!\n");
174 for (
auto &pte :
pTable) {
178 paramOut(cp,
"paddr", pte.second.paddr);
179 paramOut(cp,
"flags", pte.second.flags);
181 assert(count == pTable.size());
188 paramIn(cp,
"ptable.size", count);
#define panic(...)
This implements a cprintf based panic() function.
virtual void remap(Addr vaddr, int64_t size, Addr new_vaddr)
virtual void map(Addr vaddr, Addr paddr, int64_t size, uint64_t flags=0)
Maps a virtual memory region to a physical memory region.
decltype(nullptr) constexpr NoFault
void unserialize(CheckpointIn &cp) override
Unserialize an object.
std::shared_ptr< Request > RequestPtr
#define UNSERIALIZE_SCALAR(scalar)
std::string csprintf(const char *format, const Args &...args)
bool translate(Addr vaddr, Addr &paddr)
Translate function.
void paramOut(CheckpointOut &cp, const string &name, ExtMachInst const &machInst)
uint64_t Addr
Address type This will probably be moved somewhere else in the near future.
Declarations of a non-full system Page Table.
virtual bool isUnmapped(Addr vaddr, int64_t size)
Check if any pages in a region are already allocated.
std::ostream CheckpointOut
PTable::iterator PTableItr
const Entry * lookup(Addr vaddr)
Lookup function.
void paramIn(CheckpointIn &cp, const string &name, ExtMachInst &machInst)
virtual void unmap(Addr vaddr, int64_t size)
void getMappings(std::vector< std::pair< Addr, Addr >> *addr_mappings)
void serialize(CheckpointOut &cp) const override
Serialize an object.
Scoped checkpoint section helper class.
#define panic_if(cond,...)
Conditional panic macro that checks the supplied condition and only panics if the condition is true a...
std::shared_ptr< FaultBase > Fault