MCPcopy Create free account
hub / github.com/F-Stack/f-stack / pmap_remove_pte2

Function pmap_remove_pte2

freebsd/arm/arm/pmap-v6.c:4106–4135  ·  view source on GitHub ↗

* Do the things to unmap a page in a process. */

Source from the content-addressed store, hash-verified

4104 * Do the things to unmap a page in a process.
4105 */
4106static int
4107pmap_remove_pte2(pmap_t pmap, pt2_entry_t *pte2p, vm_offset_t va,
4108 struct spglist *free)
4109{
4110 pt2_entry_t opte2;
4111 vm_page_t m;
4112
4113 rw_assert(&pvh_global_lock, RA_WLOCKED);
4114 PMAP_LOCK_ASSERT(pmap, MA_OWNED);
4115
4116 /* Clear and invalidate the mapping. */
4117 opte2 = pte2_load_clear(pte2p);
4118 pmap_tlb_flush(pmap, va);
4119
4120 KASSERT(pte2_is_valid(opte2), ("%s: pmap %p va %#x not link pte2 %#x",
4121 __func__, pmap, va, opte2));
4122
4123 if (opte2 & PTE2_W)
4124 pmap->pm_stats.wired_count -= 1;
4125 pmap->pm_stats.resident_count -= 1;
4126 if (pte2_is_managed(opte2)) {
4127 m = PHYS_TO_VM_PAGE(pte2_pa(opte2));
4128 if (pte2_is_dirty(opte2))
4129 vm_page_dirty(m);
4130 if (opte2 & PTE2_A)
4131 vm_page_aflag_set(m, PGA_REFERENCED);
4132 pmap_remove_entry(pmap, m, va);
4133 }
4134 return (pmap_unuse_pt2(pmap, va, free));
4135}
4136
4137/*
4138 * Remove a single page from a process address space.

Callers 4

pmap_remove_pageFunction · 0.85
pmap_removeFunction · 0.85
pmap_enter_pte1Function · 0.85
pmap_adviseFunction · 0.85

Calls 11

pte2_load_clearFunction · 0.85
pmap_tlb_flushFunction · 0.85
pte2_is_validFunction · 0.85
pte2_is_managedFunction · 0.85
PHYS_TO_VM_PAGEFunction · 0.85
pte2_paFunction · 0.85
pte2_is_dirtyFunction · 0.85
vm_page_dirtyFunction · 0.85
vm_page_aflag_setFunction · 0.85
pmap_unuse_pt2Function · 0.85
pmap_remove_entryFunction · 0.70

Tested by

no test coverage detected