| 10175 | } |
| 10176 | |
| 10177 | static vm_paddr_t |
| 10178 | pmap_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 | |
| 10210 | static int |
| 10211 | pmap_large_map_getva(vm_size_t len, vm_offset_t align, vm_offset_t phase, |
no test coverage detected