Skip site navigation (1)Skip section navigation (2)
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>