Changeset View
Changeset View
Standalone View
Standalone View
head/sys/riscv/riscv/pmap.c
Show First 20 Lines • Show All 2,644 Lines • ▼ Show 20 Lines | pmap_enter(pmap_t pmap, vm_offset_t va, vm_page_t m, vm_prot_t prot, | ||||
vm_paddr_t opa, pa, l2_pa, l3_pa; | vm_paddr_t opa, pa, l2_pa, l3_pa; | ||||
vm_page_t mpte, om, l2_m, l3_m; | vm_page_t mpte, om, l2_m, l3_m; | ||||
pt_entry_t entry; | pt_entry_t entry; | ||||
pn_t l2_pn, l3_pn, pn; | pn_t l2_pn, l3_pn, pn; | ||||
int rv; | int rv; | ||||
bool nosleep; | bool nosleep; | ||||
va = trunc_page(va); | va = trunc_page(va); | ||||
if ((m->oflags & VPO_UNMANAGED) == 0 && !vm_page_xbusied(m)) | if ((m->oflags & VPO_UNMANAGED) == 0) | ||||
VM_OBJECT_ASSERT_LOCKED(m->object); | VM_PAGE_OBJECT_BUSY_ASSERT(m); | ||||
pa = VM_PAGE_TO_PHYS(m); | pa = VM_PAGE_TO_PHYS(m); | ||||
pn = (pa / PAGE_SIZE); | pn = (pa / PAGE_SIZE); | ||||
new_l3 = PTE_V | PTE_R | PTE_A; | new_l3 = PTE_V | PTE_R | PTE_A; | ||||
if (prot & VM_PROT_EXECUTE) | if (prot & VM_PROT_EXECUTE) | ||||
new_l3 |= PTE_X; | new_l3 |= PTE_X; | ||||
if (flags & VM_PROT_WRITE) | if (flags & VM_PROT_WRITE) | ||||
new_l3 |= PTE_D; | new_l3 |= PTE_D; | ||||
▲ Show 20 Lines • Show All 1,836 Lines • Show Last 20 Lines |