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

Function pmap_enter_quick_locked

freebsd/mips/mips/pmap.c:2324–2428  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

2322}
2323
2324static vm_page_t
2325pmap_enter_quick_locked(pmap_t pmap, vm_offset_t va, vm_page_t m,
2326 vm_prot_t prot, vm_page_t mpte)
2327{
2328 pt_entry_t *pte, npte;
2329 vm_paddr_t pa;
2330
2331 KASSERT(va < kmi.clean_sva || va >= kmi.clean_eva ||
2332 (m->oflags & VPO_UNMANAGED) != 0,
2333 ("pmap_enter_quick_locked: managed mapping within the clean submap"));
2334 rw_assert(&pvh_global_lock, RA_WLOCKED);
2335 PMAP_LOCK_ASSERT(pmap, MA_OWNED);
2336
2337 /*
2338 * In the case that a page table page is not resident, we are
2339 * creating it here.
2340 */
2341 if (va < VM_MAXUSER_ADDRESS) {
2342 pd_entry_t *pde;
2343 unsigned ptepindex;
2344
2345 /*
2346 * Calculate pagetable page index
2347 */
2348 ptepindex = pmap_pde_pindex(va);
2349 if (mpte && (mpte->pindex == ptepindex)) {
2350 mpte->ref_count++;
2351 } else {
2352 /*
2353 * Get the page directory entry
2354 */
2355 pde = pmap_pde(pmap, va);
2356
2357 /*
2358 * If the page table page is mapped, we just
2359 * increment the hold count, and activate it.
2360 */
2361 if (pde && *pde != 0) {
2362 mpte = PHYS_TO_VM_PAGE(
2363 MIPS_DIRECT_TO_PHYS(*pde));
2364 mpte->ref_count++;
2365 } else {
2366 mpte = _pmap_allocpte(pmap, ptepindex,
2367 PMAP_ENTER_NOSLEEP);
2368 if (mpte == NULL)
2369 return (mpte);
2370 }
2371 }
2372 } else {
2373 mpte = NULL;
2374 }
2375
2376 pte = pmap_pte(pmap, va);
2377 if (pte_test(pte, PTE_V)) {
2378 if (mpte != NULL) {
2379 mpte->ref_count--;
2380 mpte = NULL;
2381 }

Callers 2

pmap_enter_quickFunction · 0.70
pmap_enter_objectFunction · 0.70

Calls 7

pmap_pde_pindexFunction · 0.85
PHYS_TO_VM_PAGEFunction · 0.85
pmap_pdeFunction · 0.70
_pmap_allocpteFunction · 0.70
pmap_pteFunction · 0.70
pmap_try_insert_pv_entryFunction · 0.70
pmap_unwire_ptpFunction · 0.70

Tested by

no test coverage detected