Changeset View
Changeset View
Standalone View
Standalone View
sys/amd64/amd64/pmap.c
- This file is larger than 256 KB, so syntax highlighting is disabled by default.
Show First 20 Lines • Show All 6,741 Lines • ▼ Show 20 Lines | pmap_enter(pmap_t pmap, vm_offset_t va, vm_page_t m, vm_prot_t prot, | ||||
PG_V = pmap_valid_bit(pmap); | PG_V = pmap_valid_bit(pmap); | ||||
PG_RW = pmap_rw_bit(pmap); | PG_RW = pmap_rw_bit(pmap); | ||||
va = trunc_page(va); | va = trunc_page(va); | ||||
KASSERT(va <= VM_MAX_KERNEL_ADDRESS, ("pmap_enter: toobig")); | KASSERT(va <= VM_MAX_KERNEL_ADDRESS, ("pmap_enter: toobig")); | ||||
KASSERT(va < UPT_MIN_ADDRESS || va >= UPT_MAX_ADDRESS, | KASSERT(va < UPT_MIN_ADDRESS || va >= UPT_MAX_ADDRESS, | ||||
("pmap_enter: invalid to pmap_enter page table pages (va: 0x%lx)", | ("pmap_enter: invalid to pmap_enter page table pages (va: 0x%lx)", | ||||
va)); | va)); | ||||
KASSERT((m->oflags & VPO_UNMANAGED) != 0 || va < kmi.clean_sva || | KASSERT((m->oflags & VPO_UNMANAGED) != 0 || !VA_IS_CLEANMAP(va), | ||||
va >= kmi.clean_eva, | |||||
("pmap_enter: managed mapping within the clean submap")); | ("pmap_enter: managed mapping within the clean submap")); | ||||
if ((m->oflags & VPO_UNMANAGED) == 0) | if ((m->oflags & VPO_UNMANAGED) == 0) | ||||
VM_PAGE_OBJECT_BUSY_ASSERT(m); | VM_PAGE_OBJECT_BUSY_ASSERT(m); | ||||
KASSERT((flags & PMAP_ENTER_RESERVED) == 0, | KASSERT((flags & PMAP_ENTER_RESERVED) == 0, | ||||
("pmap_enter: flags %u has reserved bits set", flags)); | ("pmap_enter: flags %u has reserved bits set", flags)); | ||||
pa = VM_PAGE_TO_PHYS(m); | pa = VM_PAGE_TO_PHYS(m); | ||||
newpte = (pt_entry_t)(pa | PG_A | PG_V); | newpte = (pt_entry_t)(pa | PG_A | PG_V); | ||||
if ((flags & VM_PROT_WRITE) != 0) | if ((flags & VM_PROT_WRITE) != 0) | ||||
▲ Show 20 Lines • Show All 497 Lines • ▼ Show 20 Lines | |||||
} | } | ||||
static vm_page_t | static vm_page_t | ||||
pmap_enter_quick_locked(pmap_t pmap, vm_offset_t va, vm_page_t m, | pmap_enter_quick_locked(pmap_t pmap, vm_offset_t va, vm_page_t m, | ||||
vm_prot_t prot, vm_page_t mpte, struct rwlock **lockp) | vm_prot_t prot, vm_page_t mpte, struct rwlock **lockp) | ||||
{ | { | ||||
pt_entry_t newpte, *pte, PG_V; | pt_entry_t newpte, *pte, PG_V; | ||||
KASSERT(va < kmi.clean_sva || va >= kmi.clean_eva || | KASSERT(!VA_IS_CLEANMAP(va) || | ||||
(m->oflags & VPO_UNMANAGED) != 0, | (m->oflags & VPO_UNMANAGED) != 0, | ||||
("pmap_enter_quick_locked: managed mapping within the clean submap")); | ("pmap_enter_quick_locked: managed mapping within the clean submap")); | ||||
PG_V = pmap_valid_bit(pmap); | PG_V = pmap_valid_bit(pmap); | ||||
PMAP_LOCK_ASSERT(pmap, MA_OWNED); | PMAP_LOCK_ASSERT(pmap, MA_OWNED); | ||||
/* | /* | ||||
* In the case that a page table page is not | * In the case that a page table page is not | ||||
* resident, we are creating it here. | * resident, we are creating it here. | ||||
▲ Show 20 Lines • Show All 4,298 Lines • Show Last 20 Lines |