Simplify the page table page reference counting by pmap_enter()'s change of
mapping case. Eliminate a stale comment from pmap_enter(). Reviewed by: tegge
This commit is contained in:
parent
893cdb3d34
commit
96e5109430
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=149058
@ -1820,7 +1820,6 @@ pmap_enter(pmap_t pmap, vm_offset_t va, vm_page_t m, vm_prot_t prot,
|
||||
vm_paddr_t pa;
|
||||
register pt_entry_t *pte;
|
||||
vm_paddr_t opa;
|
||||
pd_entry_t ptepde;
|
||||
pt_entry_t origpte, newpte;
|
||||
vm_page_t mpte, om;
|
||||
|
||||
@ -1855,7 +1854,7 @@ pmap_enter(pmap_t pmap, vm_offset_t va, vm_page_t m, vm_prot_t prot,
|
||||
}
|
||||
#endif
|
||||
|
||||
pte = pmap_pte_pde(pmap, va, &ptepde);
|
||||
pte = pmap_pte(pmap, va);
|
||||
|
||||
/*
|
||||
* Page Directory table entry not valid, we need a new PT page
|
||||
@ -1915,23 +1914,23 @@ pmap_enter(pmap_t pmap, vm_offset_t va, vm_page_t m, vm_prot_t prot,
|
||||
* handle validating new mapping.
|
||||
*/
|
||||
if (opa) {
|
||||
int err;
|
||||
if (origpte & PG_W)
|
||||
pmap->pm_stats.wired_count--;
|
||||
if (origpte & PG_MANAGED) {
|
||||
om = PHYS_TO_VM_PAGE(opa);
|
||||
pmap_remove_entry(pmap, om, va);
|
||||
}
|
||||
err = pmap_unuse_pt(pmap, va, ptepde);
|
||||
if (err)
|
||||
panic("pmap_enter: pte vanished, va: 0x%lx", va);
|
||||
if (mpte != NULL) {
|
||||
mpte->wire_count--;
|
||||
KASSERT(mpte->wire_count > 0,
|
||||
("pmap_enter: missing reference to page table page,"
|
||||
" va: 0x%lx", va));
|
||||
}
|
||||
} else
|
||||
pmap->pm_stats.resident_count++;
|
||||
|
||||
/*
|
||||
* Enter on the PV list if part of our managed memory. Note that we
|
||||
* raise IPL while manipulating pv_table since pmap_enter can be
|
||||
* called at interrupt time.
|
||||
* Enter on the PV list if part of our managed memory.
|
||||
*/
|
||||
if ((m->flags & (PG_FICTITIOUS | PG_UNMANAGED)) == 0) {
|
||||
pmap_insert_entry(pmap, va, m);
|
||||
|
@ -1954,23 +1954,23 @@ pmap_enter(pmap_t pmap, vm_offset_t va, vm_page_t m, vm_prot_t prot,
|
||||
* handle validating new mapping.
|
||||
*/
|
||||
if (opa) {
|
||||
int err;
|
||||
if (origpte & PG_W)
|
||||
pmap->pm_stats.wired_count--;
|
||||
if (origpte & PG_MANAGED) {
|
||||
om = PHYS_TO_VM_PAGE(opa);
|
||||
pmap_remove_entry(pmap, om, va);
|
||||
}
|
||||
err = pmap_unuse_pt(pmap, va);
|
||||
if (err)
|
||||
panic("pmap_enter: pte vanished, va: 0x%x", va);
|
||||
if (mpte != NULL) {
|
||||
mpte->wire_count--;
|
||||
KASSERT(mpte->wire_count > 0,
|
||||
("pmap_enter: missing reference to page table page,"
|
||||
" va: 0x%x", va));
|
||||
}
|
||||
} else
|
||||
pmap->pm_stats.resident_count++;
|
||||
|
||||
/*
|
||||
* Enter on the PV list if part of our managed memory. Note that we
|
||||
* raise IPL while manipulating pv_table since pmap_enter can be
|
||||
* called at interrupt time.
|
||||
* Enter on the PV list if part of our managed memory.
|
||||
*/
|
||||
if ((m->flags & (PG_FICTITIOUS | PG_UNMANAGED)) == 0) {
|
||||
pmap_insert_entry(pmap, va, m);
|
||||
|
Loading…
Reference in New Issue
Block a user