Changeset View
Changeset View
Standalone View
Standalone View
head/sys/arm64/arm64/pmap.c
Show First 20 Lines • Show All 3,175 Lines • ▼ Show 20 Lines | pmap_enter(pmap_t pmap, vm_offset_t va, vm_page_t m, vm_prot_t prot, | ||||
pt_entry_t *l2, *l3; | pt_entry_t *l2, *l3; | ||||
pv_entry_t pv; | pv_entry_t pv; | ||||
vm_paddr_t opa, pa; | vm_paddr_t opa, pa; | ||||
vm_page_t mpte, om; | vm_page_t mpte, om; | ||||
boolean_t nosleep; | boolean_t nosleep; | ||||
int lvl, rv; | int lvl, rv; | ||||
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); | ||||
new_l3 = (pt_entry_t)(pa | ATTR_DEFAULT | ATTR_IDX(m->md.pv_memattr) | | new_l3 = (pt_entry_t)(pa | ATTR_DEFAULT | ATTR_IDX(m->md.pv_memattr) | | ||||
L3_PAGE); | L3_PAGE); | ||||
if ((prot & VM_PROT_WRITE) == 0) | if ((prot & VM_PROT_WRITE) == 0) | ||||
new_l3 |= ATTR_AP(ATTR_AP_RO); | new_l3 |= ATTR_AP(ATTR_AP_RO); | ||||
if ((prot & VM_PROT_EXECUTE) == 0 || m->md.pv_memattr == DEVICE_MEMORY) | if ((prot & VM_PROT_EXECUTE) == 0 || m->md.pv_memattr == DEVICE_MEMORY) | ||||
new_l3 |= ATTR_XN; | new_l3 |= ATTR_XN; | ||||
if ((flags & PMAP_ENTER_WIRED) != 0) | if ((flags & PMAP_ENTER_WIRED) != 0) | ||||
▲ Show 20 Lines • Show All 2,777 Lines • Show Last 20 Lines |