1/* 2 * Copyright (c) 2003 The Regents of The University of Michigan 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions are 7 * met: redistributions of source code must retain the above copyright 8 * notice, this list of conditions and the following disclaimer; --- 53 unchanged lines hidden (view full) --- 62 pTableCache[2].vaddr = 0; 63} 64 65PageTable::~PageTable() 66{ 67} 68 69void |
70PageTable::allocate(Addr vaddr, int64_t size, bool clobber) |
71{ 72 // starting address must be page aligned 73 assert(pageOffset(vaddr) == 0); 74 75 DPRINTF(MMU, "Allocating Page: %#x-%#x\n", vaddr, vaddr+ size); 76 77 for (; size > 0; size -= pageSize, vaddr += pageSize) { |
78 if (!clobber && (pTable.find(vaddr) != pTable.end())) { |
79 // already mapped |
80 fatal("PageTable::allocate: address 0x%x already mapped", vaddr); |
81 } 82 83 pTable[vaddr] = TheISA::TlbEntry(process->M5_pid, vaddr, |
84 process->system->new_page()); |
85 updateCache(vaddr, pTable[vaddr]); 86 } 87} 88 89void 90PageTable::remap(Addr vaddr, int64_t size, Addr new_vaddr) 91{ 92 assert(pageOffset(vaddr) == 0); --- 27 unchanged lines hidden (view full) --- 120 assert(iter != pTable.end()); 121 122 pTable.erase(vaddr); 123 } 124 125} 126 127bool |
128PageTable::isUnmapped(Addr vaddr, int64_t size) 129{ 130 // starting address must be page aligned 131 assert(pageOffset(vaddr) == 0); 132 133 for (; size > 0; size -= pageSize, vaddr += pageSize) { 134 if (pTable.find(vaddr) != pTable.end()) { 135 return false; 136 } 137 } 138 139 return true; 140} 141 142bool |
143PageTable::lookup(Addr vaddr, TheISA::TlbEntry &entry) 144{ 145 Addr page_addr = pageAlign(vaddr); 146 147 if (pTableCache[0].vaddr == page_addr) { 148 entry = pTableCache[0].entry; 149 return true; 150 } --- 90 unchanged lines hidden --- |