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

Function _pmap_allocpte2

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

* This routine is called if the L2 page table * is not mapped correctly. */

Source from the content-addressed store, hash-verified

2468 * is not mapped correctly.
2469 */
2470static vm_page_t
2471_pmap_allocpte2(pmap_t pmap, vm_offset_t va, u_int flags)
2472{
2473 uint32_t pte1_idx;
2474 pt1_entry_t *pte1p;
2475 pt2_entry_t pte2;
2476 vm_page_t m;
2477 vm_paddr_t pt2pg_pa, pt2_pa;
2478
2479 pte1_idx = pte1_index(va);
2480 pte1p = pmap->pm_pt1 + pte1_idx;
2481
2482 KASSERT(pte1_load(pte1p) == 0,
2483 ("%s: pm_pt1[%#x] is not zero: %#x", __func__, pte1_idx,
2484 pte1_load(pte1p)));
2485
2486 pte2 = pt2tab_load(pmap_pt2tab_entry(pmap, va));
2487 if (!pte2_is_valid(pte2)) {
2488 /*
2489 * Install new PT2s page into pmap PT2TAB.
2490 */
2491 m = vm_page_alloc(NULL, pte1_idx & ~PT2PG_MASK,
2492 VM_ALLOC_NOOBJ | VM_ALLOC_WIRED | VM_ALLOC_ZERO);
2493 if (m == NULL) {
2494 if ((flags & PMAP_ENTER_NOSLEEP) == 0) {
2495 PMAP_UNLOCK(pmap);
2496 rw_wunlock(&pvh_global_lock);
2497 vm_wait(NULL);
2498 rw_wlock(&pvh_global_lock);
2499 PMAP_LOCK(pmap);
2500 }
2501
2502 /*
2503 * Indicate the need to retry. While waiting,
2504 * the L2 page table page may have been allocated.
2505 */
2506 return (NULL);
2507 }
2508 pmap->pm_stats.resident_count++;
2509 pt2pg_pa = pmap_pt2pg_init(pmap, va, m);
2510 } else {
2511 pt2pg_pa = pte2_pa(pte2);
2512 m = PHYS_TO_VM_PAGE(pt2pg_pa);
2513 }
2514
2515 pt2_wirecount_inc(m, pte1_idx);
2516 pt2_pa = page_pt2pa(pt2pg_pa, pte1_idx);
2517 pte1_store(pte1p, PTE1_LINK(pt2_pa));
2518
2519 return (m);
2520}
2521
2522static vm_page_t
2523pmap_allocpte2(pmap_t pmap, vm_offset_t va, u_int flags)

Callers 2

pmap_allocpte2Function · 0.85
pmap_enter_quick_lockedFunction · 0.85

Calls 13

pte1_indexFunction · 0.85
pte1_loadFunction · 0.85
pt2tab_loadFunction · 0.85
pmap_pt2tab_entryFunction · 0.85
pte2_is_validFunction · 0.85
vm_page_allocFunction · 0.85
vm_waitFunction · 0.85
pmap_pt2pg_initFunction · 0.85
pte2_paFunction · 0.85
PHYS_TO_VM_PAGEFunction · 0.85
pt2_wirecount_incFunction · 0.85
page_pt2paFunction · 0.85

Tested by

no test coverage detected