48d47
< #include "sim/process.hh"
50d48
< #include "sim/system.hh"
55c53
< PageTable::PageTable(Process *_process, Addr _pageSize)
---
> PageTable::PageTable(const std::string &__name, uint64_t _pid, Addr _pageSize)
57c55
< process(_process)
---
> pid(_pid), _name(__name)
70c68
< PageTable::allocate(Addr vaddr, int64_t size)
---
> PageTable::map(Addr vaddr, Addr paddr, int64_t size, bool clobber)
77,80c75,76
< for (; size > 0; size -= pageSize, vaddr += pageSize) {
< PTableItr iter = pTable.find(vaddr);
<
< if (iter != pTable.end()) {
---
> for (; size > 0; size -= pageSize, vaddr += pageSize, paddr += pageSize) {
> if (!clobber && (pTable.find(vaddr) != pTable.end())) {
82,83c78
< fatal("PageTable::allocate: address 0x%x already mapped",
< vaddr);
---
> fatal("PageTable::allocate: address 0x%x already mapped", vaddr);
86,87c81
< pTable[vaddr] = TheISA::TlbEntry(process->M5_pid, vaddr,
< process->system->new_page());
---
> pTable[vaddr] = TheISA::TlbEntry(pid, vaddr, paddr);
114c108
< PageTable::deallocate(Addr vaddr, int64_t size)
---
> PageTable::unmap(Addr vaddr, int64_t size)
118c112
< DPRINTF(MMU, "Deallocating page: %#x-%#x\n", vaddr, vaddr+ size);
---
> DPRINTF(MMU, "Unmapping page: %#x-%#x\n", vaddr, vaddr+ size);
130a125,139
> PageTable::isUnmapped(Addr vaddr, int64_t size)
> {
> // starting address must be page aligned
> assert(pageOffset(vaddr) == 0);
>
> for (; size > 0; size -= pageSize, vaddr += pageSize) {
> if (pTable.find(vaddr) != pTable.end()) {
> return false;
> }
> }
>
> return true;
> }
>
> bool
199c208
< os << "\n[" << csprintf("%s.Entry%d", process->name(), count) << "]\n";
---
> os << "\n[" << csprintf("%s.Entry%d", name(), count) << "]\n";
222c231
< paramIn(cp, csprintf("%s.Entry%d", process->name(), i), "vaddr", vaddr);
---
> paramIn(cp, csprintf("%s.Entry%d", name(), i), "vaddr", vaddr);
224c233
< entry->unserialize(cp, csprintf("%s.Entry%d", process->name(), i));
---
> entry->unserialize(cp, csprintf("%s.Entry%d", name(), i));