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

Function pmap_large_map_kextract

freebsd/amd64/amd64/pmap.c:10177–10208  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

10175}
10176
10177static vm_paddr_t
10178pmap_large_map_kextract(vm_offset_t va)
10179{
10180 pdp_entry_t *pdpe, pdp;
10181 pd_entry_t *pde, pd;
10182 pt_entry_t *pte, pt;
10183
10184 KASSERT(PMAP_ADDRESS_IN_LARGEMAP(va),
10185 ("not largemap range %#lx", (u_long)va));
10186 pdpe = pmap_large_map_pdpe(va);
10187 pdp = *pdpe;
10188 KASSERT((pdp & X86_PG_V) != 0,
10189 ("invalid pdp va %#lx pdpe %#lx pdp %#lx", va,
10190 (u_long)pdpe, pdp));
10191 if ((pdp & X86_PG_PS) != 0) {
10192 KASSERT((amd_feature & AMDID_PAGE1GB) != 0,
10193 ("no 1G pages, va %#lx pdpe %#lx pdp %#lx", va,
10194 (u_long)pdpe, pdp));
10195 return ((pdp & PG_PS_PDP_FRAME) | (va & PDPMASK));
10196 }
10197 pde = pmap_pdpe_to_pde(pdpe, va);
10198 pd = *pde;
10199 KASSERT((pd & X86_PG_V) != 0,
10200 ("invalid pd va %#lx pde %#lx pd %#lx", va, (u_long)pde, pd));
10201 if ((pd & X86_PG_PS) != 0)
10202 return ((pd & PG_PS_FRAME) | (va & PDRMASK));
10203 pte = pmap_pde_to_pte(pde, va);
10204 pt = *pte;
10205 KASSERT((pt & X86_PG_V) != 0,
10206 ("invalid pte va %#lx pte %#lx pt %#lx", va, (u_long)pte, pt));
10207 return ((pt & PG_FRAME) | (va & PAGE_MASK));
10208}
10209
10210static int
10211pmap_large_map_getva(vm_size_t len, vm_offset_t align, vm_offset_t phase,

Callers 1

pmap_kextractFunction · 0.85

Calls 3

pmap_large_map_pdpeFunction · 0.85
pmap_pdpe_to_pdeFunction · 0.70
pmap_pde_to_pteFunction · 0.70

Tested by

no test coverage detected