Pte
DumpPageTableInt(Pte* pte, uint64_t virtAdr, uint32_t level, uint64& firstVirt, uint64& firstPhys,
DumpPageTableInt((Pte*)VirtFromPhys(B_PAGE_SIZE*pte[i].ppn),
Pte* root = (Pte*)VirtFromPhys(satpReg.ppn * B_PAGE_SIZE);
static Pte*
Pte *pte = (Pte*)VirtFromPhys(sPageTable);
memset((Pte*)VirtFromPhys(B_PAGE_SIZE * ppn), 0, B_PAGE_SIZE);
Pte newPte {
pte = (Pte*)VirtFromPhys(B_PAGE_SIZE * pte->ppn);
Pte* pte = LookupPte(virtAdr, true);
Pte newPte {
Pte* root = (Pte*)VirtFromPhys(sPageTable);
Pte* pte = &root[i];
Pte newPte {
Pte {.isRead = true, .isWrite = true}.val);
Pte {.isRead = true, .isWrite = true, .isExec = true}.val);
Pte {.isRead = true, .isWrite = true, .isExec = true}.val);
MapRange(virtAdr, physAdr, size, Pte {.isRead = true, .isWrite = true, .isExec = true}.val);
MapAddrRange(gKernelArgs.arch_args.clint, Pte {.isRead = true, .isWrite = true}.val);
MapAddrRange(gKernelArgs.arch_args.htif, Pte {.isRead = true, .isWrite = true}.val);
MapAddrRange(gKernelArgs.arch_args.plic, Pte {.isRead = true, .isWrite = true}.val);
Pte {.isRead = true, .isWrite = true}.val);
Pte {.isRead = true, .isWrite = true}.val);
static Pte*
Pte *pte = (Pte*)VirtFromPhys(sPageTable);
memset((Pte*)VirtFromPhys(B_PAGE_SIZE * ppn), 0, B_PAGE_SIZE);
Pte newPte {
pte = (Pte*)VirtFromPhys(B_PAGE_SIZE * pte->ppn);
Pte* pte = LookupPte(virtAdr, true);
Pte newPte {
Pte *root = (Pte*)VirtFromPhys(sPageTable);
Pte* pte = &root[i];
Pte newPte {
Pte {.isRead = true, .isWrite = true}.val);
Pte {.isRead = true, .isWrite = true, .isExec = true}.val);
Pte flags {
MapAddrRange(gKernelArgs.arch_args.clint, Pte {.isRead = true, .isWrite = true}.val);
MapAddrRange(gKernelArgs.arch_args.htif, Pte {.isRead = true, .isWrite = true}.val);
MapAddrRange(gKernelArgs.arch_args.plic, Pte {.isRead = true, .isWrite = true}.val);
Pte {.isRead = true, .isWrite = true}.val);
Pte *kernelPageTable = (Pte*)VirtFromPhys(kernelMap->PageTable());
Pte *userPageTable = (Pte*)VirtFromPhys(fPageTable);
Pte *pte = &userPageTable[i];
auto pte = (std::atomic<Pte>*)VirtFromPhys(fPageTable);
Pte newPte {
pte = (std::atomic<Pte>*)VirtFromPhys(B_PAGE_SIZE * pte->load().ppn);
std::atomic<Pte>* pte = LookupPte(virtAdr, false, NULL);
Pte pteVal = pte->load();
std::atomic<Pte>* pte = LookupPte(virtualAddress, true, reservation);
Pte newPte {
std::atomic<Pte>* pte = LookupPte(page, false, NULL);
Pte oldPte = pte->exchange({});
std::atomic<Pte>* pte = LookupPte(address, false, NULL);
Pte oldPte = pte->exchange({});
std::atomic<Pte>* pte = LookupPte(start, false, NULL);
Pte oldPte = pte->exchange({});
Pte* pte = (Pte*)VirtFromPhys(ppn * B_PAGE_SIZE);
std::atomic<Pte>* pte = LookupPte(virtualAddress, false, NULL);
Pte pteVal = pte->load();
std::atomic<Pte>* pte = LookupPte(page, false, NULL);
Pte oldPte {};
Pte newPte {};
Pte pteFlags {
std::atomic<Pte>* pte = LookupPte(address, false, NULL);
std::atomic<Pte>* pte = LookupPte(address, false, NULL);
std::atomic<Pte>* pte = LookupPte(address, false, NULL);
Pte oldPte {};
~Pte {.isAccessed = true, .isDirty = true}.val);
~Pte {.isAccessed = true, .isDirty = true}.val);
Pte* pte = (Pte*)VirtFromPhys(ppn * B_PAGE_SIZE);
std::atomic<Pte>*
std::atomic<Pte>* LookupPte(addr_t virtAdr, bool alloc,
DumpPageTableInt(Pte* pte, uint64_t virtAdr, uint32_t level, PageTableDumper& dumper)
DumpPageTableInt((Pte*)VirtFromPhys(B_PAGE_SIZE*pte[i].ppn),
Pte* root = (Pte*)VirtFromPhys(satp.ppn * B_PAGE_SIZE);
Pte* pte = LookupPte(satp.ppn * B_PAGE_SIZE, base);
Pte* pte = LookupPte(satp.ppn * B_PAGE_SIZE, virt);
static Pte*
Pte *pte = (Pte*)VirtFromPhys(pageTable);
pte = (Pte*)VirtFromPhys(B_PAGE_SIZE * pte->ppn);
Pte flags {
static Pte*
Pte *pte = (Pte*)VirtFromPhys(sPageTable);
memset((Pte*)VirtFromPhys(B_PAGE_SIZE * ppn), 0, B_PAGE_SIZE);
Pte newPte {
pte = (Pte*)VirtFromPhys(B_PAGE_SIZE * pte->ppn);
Pte* pte = LookupPte(virtAdr, true, args);
Pte newPte {