| 10152 | } |
| 10153 | |
| 10154 | static pt_entry_t * |
| 10155 | pmap_large_map_pte(vm_offset_t va) |
| 10156 | { |
| 10157 | pd_entry_t *pde; |
| 10158 | vm_page_t m; |
| 10159 | vm_paddr_t mphys; |
| 10160 | |
| 10161 | retry: |
| 10162 | pde = pmap_large_map_pde(va); |
| 10163 | if (*pde == 0) { |
| 10164 | m = pmap_large_map_getptp(); |
| 10165 | if (m == NULL) |
| 10166 | goto retry; |
| 10167 | mphys = VM_PAGE_TO_PHYS(m); |
| 10168 | *pde = mphys | X86_PG_A | X86_PG_RW | X86_PG_V | pg_nx; |
| 10169 | PHYS_TO_VM_PAGE(DMAP_TO_PHYS((uintptr_t)pde))->ref_count++; |
| 10170 | } else { |
| 10171 | MPASS((*pde & X86_PG_PS) == 0); |
| 10172 | mphys = *pde & PG_FRAME; |
| 10173 | } |
| 10174 | return ((pt_entry_t *)PHYS_TO_DMAP(mphys) + pmap_pte_index(va)); |
| 10175 | } |
| 10176 | |
| 10177 | static vm_paddr_t |
| 10178 | pmap_large_map_kextract(vm_offset_t va) |
no test coverage detected