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

Function pmap_unmapbios

freebsd/arm64/arm64/pmap.c:5978–6042  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

5976}
5977
5978void
5979pmap_unmapbios(vm_offset_t va, vm_size_t size)
5980{
5981 struct pmap_preinit_mapping *ppim;
5982 vm_offset_t offset, tmpsize, va_trunc;
5983 pd_entry_t *pde;
5984 pt_entry_t *l2;
5985 int i, lvl, l2_blocks, block;
5986 bool preinit_map;
5987
5988 l2_blocks =
5989 (roundup2(va + size, L2_SIZE) - rounddown2(va, L2_SIZE)) >> L2_SHIFT;
5990 KASSERT(l2_blocks > 0, ("pmap_unmapbios: invalid size %lx", size));
5991
5992 /* Remove preinit mapping */
5993 preinit_map = false;
5994 block = 0;
5995 for (i = 0; i < PMAP_PREINIT_MAPPING_COUNT; i++) {
5996 ppim = pmap_preinit_mapping + i;
5997 if (ppim->va == va) {
5998 KASSERT(ppim->size == size,
5999 ("pmap_unmapbios: size mismatch"));
6000 ppim->va = 0;
6001 ppim->pa = 0;
6002 ppim->size = 0;
6003 preinit_map = true;
6004 offset = block * L2_SIZE;
6005 va_trunc = rounddown2(va, L2_SIZE) + offset;
6006
6007 /* Remove L2_BLOCK */
6008 pde = pmap_pde(kernel_pmap, va_trunc, &lvl);
6009 KASSERT(pde != NULL,
6010 ("pmap_unmapbios: Invalid page entry, va: 0x%lx",
6011 va_trunc));
6012 l2 = pmap_l1_to_l2(pde, va_trunc);
6013 pmap_clear(l2);
6014
6015 if (block == (l2_blocks - 1))
6016 break;
6017 block++;
6018 }
6019 }
6020 if (preinit_map) {
6021 pmap_invalidate_all(kernel_pmap);
6022 return;
6023 }
6024
6025 /* Unmap the pages reserved with kva_alloc. */
6026 if (vm_initialized) {
6027 offset = va & PAGE_MASK;
6028 size = round_page(offset + size);
6029 va = trunc_page(va);
6030
6031 pde = pmap_pde(kernel_pmap, va, &lvl);
6032 KASSERT(pde != NULL,
6033 ("pmap_unmapbios: Invalid page entry, va: 0x%lx", va));
6034 KASSERT(lvl == 2, ("pmap_unmapbios: Invalid level %d", lvl));
6035

Callers 13

acpi_machdep_quirksFunction · 0.85
map_tableFunction · 0.85
probe_tableFunction · 0.85
acpi_unmap_tableFunction · 0.85
acpi_find_tableFunction · 0.85
map_tableFunction · 0.85
probe_tableFunction · 0.85
acpi_unmap_tableFunction · 0.85
acpi_find_tableFunction · 0.85
map_tableFunction · 0.85
probe_tableFunction · 0.85
acpi_unmap_tableFunction · 0.85

Calls 5

pmap_l1_to_l2Function · 0.85
kva_freeFunction · 0.85
pmap_pdeFunction · 0.70
pmap_invalidate_allFunction · 0.70
pmap_kremoveFunction · 0.70

Tested by

no test coverage detected