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,134 Lines • ▼ Show 20 Lines | pmap_remove_pde(pmap_t pmap, pd_entry_t *pdq, vm_offset_t sva, | ||||
} | } | ||||
if (pmap == kernel_pmap) { | if (pmap == kernel_pmap) { | ||||
pmap_remove_kernel_pde(pmap, pdq, sva); | pmap_remove_kernel_pde(pmap, pdq, sva); | ||||
} else { | } else { | ||||
mpte = pmap_remove_pt_page(pmap, sva); | mpte = pmap_remove_pt_page(pmap, sva); | ||||
if (mpte != NULL) { | if (mpte != NULL) { | ||||
KASSERT(mpte->valid == VM_PAGE_BITS_ALL, | KASSERT(mpte->valid == VM_PAGE_BITS_ALL, | ||||
("pmap_remove_pde: pte page not promoted")); | ("pmap_remove_pde: pte page not promoted")); | ||||
pmap_resident_count_adj(pmap, -1); | pmap_pt_page_count_adj(pmap, -1); | ||||
KASSERT(mpte->ref_count == NPTEPG, | KASSERT(mpte->ref_count == NPTEPG, | ||||
("pmap_remove_pde: pte page ref count error")); | ("pmap_remove_pde: pte page ref count error")); | ||||
mpte->ref_count = 0; | mpte->ref_count = 0; | ||||
pmap_add_delayed_free_list(mpte, free, FALSE); | pmap_add_delayed_free_list(mpte, free, FALSE); | ||||
} | } | ||||
} | } | ||||
return (pmap_unuse_pt(pmap, sva, *pmap_pdpe(pmap, sva), free)); | return (pmap_unuse_pt(pmap, sva, *pmap_pdpe(pmap, sva), free)); | ||||
} | } | ||||
▲ Show 20 Lines • Show All 2,251 Lines • ▼ Show 20 Lines | */ | ||||
if ((mt->a.flags & PGA_WRITEABLE) != 0 && | if ((mt->a.flags & PGA_WRITEABLE) != 0 && | ||||
TAILQ_EMPTY(&mt->md.pv_list)) | TAILQ_EMPTY(&mt->md.pv_list)) | ||||
vm_page_aflag_clear(mt, PGA_WRITEABLE); | vm_page_aflag_clear(mt, PGA_WRITEABLE); | ||||
} | } | ||||
mpte = pmap_remove_pt_page(pmap, pv->pv_va); | mpte = pmap_remove_pt_page(pmap, pv->pv_va); | ||||
if (mpte != NULL) { | if (mpte != NULL) { | ||||
KASSERT(mpte->valid == VM_PAGE_BITS_ALL, | KASSERT(mpte->valid == VM_PAGE_BITS_ALL, | ||||
("pmap_remove_pages: pte page not promoted")); | ("pmap_remove_pages: pte page not promoted")); | ||||
pmap_resident_count_adj(pmap, -1); | pmap_pt_page_count_adj(pmap, -1); | ||||
KASSERT(mpte->ref_count == NPTEPG, | KASSERT(mpte->ref_count == NPTEPG, | ||||
("pmap_remove_pages: pte page reference count error")); | ("pmap_remove_pages: pte page reference count error")); | ||||
mpte->ref_count = 0; | mpte->ref_count = 0; | ||||
pmap_add_delayed_free_list(mpte, &free, FALSE); | pmap_add_delayed_free_list(mpte, &free, FALSE); | ||||
} | } | ||||
} else { | } else { | ||||
pmap_resident_count_adj(pmap, -1); | pmap_resident_count_adj(pmap, -1); | ||||
TAILQ_REMOVE(&m->md.pv_list, pv, pv_next); | TAILQ_REMOVE(&m->md.pv_list, pv, pv_next); | ||||
▲ Show 20 Lines • Show All 3,528 Lines • Show Last 20 Lines |