Date: Thu, 23 Apr 2026 18:16:26 +0000 From: John Baldwin <jhb@FreeBSD.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org Subject: git: 496453e9de3f - main - amd64/aarch64 pmap: Switch type of pmap_preinit_mapping.va to void * Message-ID: <69ea61fa.44efe.38028290@gitrepo.freebsd.org>
index | next in thread | raw e-mail
The branch main has been updated by jhb: URL: https://cgit.FreeBSD.org/src/commit/?id=496453e9de3f27f84b6c68d2377f5e525d132967 commit 496453e9de3f27f84b6c68d2377f5e525d132967 Author: John Baldwin <jhb@FreeBSD.org> AuthorDate: 2026-04-23 17:05:55 +0000 Commit: John Baldwin <jhb@FreeBSD.org> CommitDate: 2026-04-23 17:05:55 +0000 amd64/aarch64 pmap: Switch type of pmap_preinit_mapping.va to void * Effort: CHERI upstreaming Reviewed by: kib Sponsored by: AFRL, DARPA Pull Request: https://github.com/freebsd/freebsd-src/pull/2068 --- sys/amd64/amd64/pmap.c | 32 +++++++++++++++++--------------- sys/arm64/arm64/pmap.c | 24 +++++++++++++----------- 2 files changed, 30 insertions(+), 26 deletions(-) diff --git a/sys/amd64/amd64/pmap.c b/sys/amd64/amd64/pmap.c index b9ecc230495d..60a5b5a2da9a 100644 --- a/sys/amd64/amd64/pmap.c +++ b/sys/amd64/amd64/pmap.c @@ -530,7 +530,7 @@ struct kva_layout_s kva_layout_la57 = { #define PMAP_PREINIT_MAPPING_COUNT 8 static struct pmap_preinit_mapping { vm_paddr_t pa; - vm_offset_t va; + void *va; vm_size_t sz; int mode; } pmap_preinit_mapping[PMAP_PREINIT_MAPPING_COUNT]; @@ -2608,7 +2608,7 @@ pmap_init(void) pmap_initialized = 1; for (i = 0; i < PMAP_PREINIT_MAPPING_COUNT; i++) { ppim = pmap_preinit_mapping + i; - if (ppim->va == 0) + if (ppim->va == NULL) continue; /* Make the direct map consistent */ if (ppim->pa < dmaplimit && ppim->pa + ppim->sz <= dmaplimit) { @@ -2617,7 +2617,7 @@ pmap_init(void) } if (!bootverbose) continue; - printf("PPIM %u: PA=%#lx, VA=%#lx, size=%#lx, mode=%#x\n", i, + printf("PPIM %u: PA=%#lx, VA=%p, size=%#lx, mode=%#x\n", i, ppim->pa, ppim->va, ppim->sz, ppim->mode); } @@ -9407,13 +9407,13 @@ pmap_mapdev_internal(vm_paddr_t pa, vm_size_t size, int mode, int flags) va = NULL; for (i = 0; i < PMAP_PREINIT_MAPPING_COUNT; i++) { ppim = pmap_preinit_mapping + i; - if (ppim->va == 0) { + if (ppim->va == NULL) { ppim->pa = pa; ppim->sz = size; ppim->mode = mode; - ppim->va = virtual_avail; + ppim->va = (void *)virtual_avail; virtual_avail += size; - va = (void *)ppim->va; + va = ppim->va; break; } } @@ -9495,15 +9495,17 @@ void pmap_unmapdev(void *p, vm_size_t size) { struct pmap_preinit_mapping *ppim; - vm_offset_t offset, va; + char *va; + vm_offset_t offset; int i; - va = (vm_offset_t)p; + va = p; /* If we gave a direct map region in pmap_mapdev, do nothing */ - if (va >= kva_layout.dmap_low && va < kva_layout.dmap_high) + if ((vm_offset_t)va >= kva_layout.dmap_low && + (vm_offset_t)va < kva_layout.dmap_high) return; - offset = va & PAGE_MASK; + offset = (vm_offset_t)va & PAGE_MASK; size = round_page(offset + size); va = trunc_page(va); for (i = 0; i < PMAP_PREINIT_MAPPING_COUNT; i++) { @@ -9512,17 +9514,17 @@ pmap_unmapdev(void *p, vm_size_t size) if (pmap_initialized) return; ppim->pa = 0; - ppim->va = 0; + ppim->va = NULL; ppim->sz = 0; ppim->mode = 0; - if (va + size == virtual_avail) - virtual_avail = va; + if (va + size == (void *)virtual_avail) + virtual_avail = (vm_offset_t)va; return; } } if (pmap_initialized) { - pmap_qremove((void *)va, atop(size)); - kva_free((void *)va, size); + pmap_qremove(va, atop(size)); + kva_free(va, size); } } diff --git a/sys/arm64/arm64/pmap.c b/sys/arm64/arm64/pmap.c index 0ce4435e481d..4e216ea01ab5 100644 --- a/sys/arm64/arm64/pmap.c +++ b/sys/arm64/arm64/pmap.c @@ -319,7 +319,7 @@ static int vm_initialized = 0; /* No need to use pre-init maps when set */ */ static struct pmap_preinit_mapping { vm_paddr_t pa; - vm_offset_t va; + void *va; vm_size_t size; } pmap_preinit_mapping[PMAP_PREINIT_MAPPING_COUNT]; @@ -8042,7 +8042,7 @@ pmap_mapbios(vm_paddr_t pa, vm_size_t size) /* Mark entries as allocated */ ppim = pmap_preinit_mapping + i; ppim->pa = pa; - ppim->va = va + offset; + ppim->va = (char *)va + offset; ppim->size = size; } @@ -8104,20 +8104,21 @@ void pmap_unmapbios(void *p, vm_size_t size) { struct pmap_preinit_mapping *ppim; - vm_offset_t offset, va, va_trunc; + char *va; + vm_offset_t offset, va_trunc; pd_entry_t *pde; pt_entry_t *l2; int error __diagused, i, lvl, l2_blocks, block; bool preinit_map; - va = (vm_offset_t)p; + va = p; if (VIRT_IN_DMAP(va)) { KASSERT(VIRT_IN_DMAP(va + size - 1), - ("%s: End address not in DMAP region: %lx", __func__, + ("%s: End address not in DMAP region: %p", __func__, va + size - 1)); /* Ensure the attributes are as expected for the DMAP region */ PMAP_LOCK(kernel_pmap); - error = pmap_change_props_locked(p, size, + error = pmap_change_props_locked(va, size, PROT_READ | PROT_WRITE, VM_MEMATTR_DEFAULT, false); PMAP_UNLOCK(kernel_pmap); KASSERT(error == 0, ("%s: Failed to reset DMAP attributes: %d", @@ -8138,12 +8139,13 @@ pmap_unmapbios(void *p, vm_size_t size) if (ppim->va == va) { KASSERT(ppim->size == size, ("pmap_unmapbios: size mismatch")); - ppim->va = 0; + ppim->va = NULL; ppim->pa = 0; ppim->size = 0; preinit_map = true; offset = block * L2_SIZE; - va_trunc = rounddown2(va, L2_SIZE) + offset; + va_trunc = rounddown2((vm_offset_t)va, L2_SIZE) + + offset; /* Remove L2_BLOCK */ pde = pmap_pde(kernel_pmap, va_trunc, &lvl); @@ -8165,14 +8167,14 @@ pmap_unmapbios(void *p, vm_size_t size) /* Unmap the pages reserved with kva_alloc. */ if (vm_initialized) { - offset = va & PAGE_MASK; + offset = (vm_offset_t)va & PAGE_MASK; size = round_page(offset + size); va = trunc_page(va); /* Unmap and invalidate the pages */ - pmap_kremove_device(va, size); + pmap_kremove_device((vm_offset_t)va, size); - kva_free((void *)va, size); + kva_free(va, size); } }home | help
Want to link to this message? Use this
URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?69ea61fa.44efe.38028290>
