Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 23 Apr 2026 18:16:13 +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: ec3a0b2a02ee - main - pmap_map_io_transient: Use void * instead of vm_offset_t for vaddr array
Message-ID:  <69ea61ed.4573b.177c7996@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=ec3a0b2a02ee2aa459aa72d751f6670b7f813f31

commit ec3a0b2a02ee2aa459aa72d751f6670b7f813f31
Author:     John Baldwin <jhb@FreeBSD.org>
AuthorDate: 2026-04-23 17:05:54 +0000
Commit:     John Baldwin <jhb@FreeBSD.org>
CommitDate: 2026-04-23 17:05:54 +0000

    pmap_map_io_transient: Use void * instead of vm_offset_t for vaddr array
    
    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            | 24 ++++++++++++++----------
 sys/amd64/amd64/uio_machdep.c     |  4 ++--
 sys/amd64/include/pmap.h          |  4 ++--
 sys/arm64/arm64/pmap.c            | 10 ++++++----
 sys/arm64/arm64/uio_machdep.c     |  4 ++--
 sys/arm64/include/pmap.h          |  4 ++--
 sys/dev/cxgbe/cxgbei/icl_cxgbei.c |  4 ++--
 sys/riscv/include/pmap.h          |  4 ++--
 sys/riscv/riscv/pmap.c            | 10 ++++++----
 sys/riscv/riscv/uio_machdep.c     |  4 ++--
 10 files changed, 40 insertions(+), 32 deletions(-)

diff --git a/sys/amd64/amd64/pmap.c b/sys/amd64/amd64/pmap.c
index 66b17f89b4ff..bc4fa33fa175 100644
--- a/sys/amd64/amd64/pmap.c
+++ b/sys/amd64/amd64/pmap.c
@@ -8303,7 +8303,8 @@ pmap_copy_pages(vm_page_t ma[], vm_offset_t a_offset, vm_page_t mb[],
 {
 	void *a_cp, *b_cp;
 	vm_page_t pages[2];
-	vm_offset_t vaddr[2], a_pg_offset, b_pg_offset;
+	void *vaddr[2];
+	vm_offset_t a_pg_offset, b_pg_offset;
 	int cnt;
 	bool mapped;
 
@@ -10494,10 +10495,11 @@ done:
  *
  */
 bool
-pmap_map_io_transient(vm_page_t page[], vm_offset_t vaddr[], int count,
+pmap_map_io_transient(vm_page_t page[], void *vaddr[], int count,
     bool can_fault)
 {
 	vm_paddr_t paddr;
+	vmem_addr_t addr;
 	bool needs_mapping;
 	int error __unused, i;
 
@@ -10510,11 +10512,12 @@ pmap_map_io_transient(vm_page_t page[], vm_offset_t vaddr[], int count,
 		paddr = VM_PAGE_TO_PHYS(page[i]);
 		if (__predict_false(paddr >= dmaplimit)) {
 			error = vmem_alloc(kernel_arena, PAGE_SIZE,
-			    M_BESTFIT | M_WAITOK, &vaddr[i]);
+			    M_BESTFIT | M_WAITOK, &addr);
 			KASSERT(error == 0, ("vmem_alloc failed: %d", error));
+			vaddr[i] = (void *)addr;
 			needs_mapping = true;
 		} else {
-			vaddr[i] = PHYS_TO_DMAP(paddr);
+			vaddr[i] = (void *)PHYS_TO_DMAP(paddr);
 		}
 	}
 
@@ -10542,11 +10545,11 @@ pmap_map_io_transient(vm_page_t page[], vm_offset_t vaddr[], int count,
 				 * thread to the CPU and instead add a global
 				 * mapping visible to all CPUs.
 				 */
-				pmap_qenter(vaddr[i], &page[i], 1);
+				pmap_qenter((vm_offset_t)vaddr[i], &page[i], 1);
 			} else {
-				pmap_kenter_attr(vaddr[i], paddr,
+				pmap_kenter_attr((vm_offset_t)vaddr[i], paddr,
 				    page[i]->md.pat_mode);
-				pmap_invlpg(kernel_pmap, vaddr[i]);
+				pmap_invlpg(kernel_pmap, (vm_offset_t)vaddr[i]);
 			}
 		}
 	}
@@ -10555,7 +10558,7 @@ pmap_map_io_transient(vm_page_t page[], vm_offset_t vaddr[], int count,
 }
 
 void
-pmap_unmap_io_transient(vm_page_t page[], vm_offset_t vaddr[], int count,
+pmap_unmap_io_transient(vm_page_t page[], void *vaddr[], int count,
     bool can_fault)
 {
 	vm_paddr_t paddr;
@@ -10567,8 +10570,9 @@ pmap_unmap_io_transient(vm_page_t page[], vm_offset_t vaddr[], int count,
 		paddr = VM_PAGE_TO_PHYS(page[i]);
 		if (paddr >= dmaplimit) {
 			if (can_fault)
-				pmap_qremove(vaddr[i], 1);
-			vmem_free(kernel_arena, vaddr[i], PAGE_SIZE);
+				pmap_qremove((vm_offset_t)vaddr[i], 1);
+			vmem_free(kernel_arena, (vm_offset_t)vaddr[i],
+			    PAGE_SIZE);
 		}
 	}
 }
diff --git a/sys/amd64/amd64/uio_machdep.c b/sys/amd64/amd64/uio_machdep.c
index 83795653fa28..16915bccf9f5 100644
--- a/sys/amd64/amd64/uio_machdep.c
+++ b/sys/amd64/amd64/uio_machdep.c
@@ -57,8 +57,8 @@ uiomove_fromphys(vm_page_t ma[], vm_offset_t offset, int n, struct uio *uio)
 {
 	struct thread *td = curthread;
 	struct iovec *iov;
-	void *cp;
-	vm_offset_t page_offset, vaddr;
+	void *cp, *vaddr;
+	vm_offset_t page_offset;
 	size_t cnt;
 	int error = 0;
 	int save = 0;
diff --git a/sys/amd64/include/pmap.h b/sys/amd64/include/pmap.h
index 1bf67248125c..1d9124f34434 100644
--- a/sys/amd64/include/pmap.h
+++ b/sys/amd64/include/pmap.h
@@ -425,8 +425,8 @@ void	pmap_invalidate_cache_pages(vm_page_t *pages, int count);
 void	pmap_invalidate_cache_range(vm_offset_t sva, vm_offset_t eva);
 void	pmap_force_invalidate_cache_range(vm_offset_t sva, vm_offset_t eva);
 void	pmap_get_mapping(pmap_t pmap, vm_offset_t va, uint64_t *ptr, int *num);
-bool	pmap_map_io_transient(vm_page_t *, vm_offset_t *, int, bool);
-void	pmap_unmap_io_transient(vm_page_t *, vm_offset_t *, int, bool);
+bool	pmap_map_io_transient(vm_page_t *, void **, int, bool);
+void	pmap_unmap_io_transient(vm_page_t *, void **, int, bool);
 void	pmap_map_delete(pmap_t, vm_offset_t, vm_offset_t);
 void	pmap_pti_add_kva(vm_offset_t sva, vm_offset_t eva, bool exec);
 void	pmap_pti_remove_kva(vm_offset_t sva, vm_offset_t eva);
diff --git a/sys/arm64/arm64/pmap.c b/sys/arm64/arm64/pmap.c
index 3d42ee058c28..0956f33bcd01 100644
--- a/sys/arm64/arm64/pmap.c
+++ b/sys/arm64/arm64/pmap.c
@@ -9620,10 +9620,11 @@ pmap_align_superpage(vm_object_t object, vm_ooffset_t offset,
  *
  */
 bool
-pmap_map_io_transient(vm_page_t page[], vm_offset_t vaddr[], int count,
+pmap_map_io_transient(vm_page_t page[], void *vaddr[], int count,
     bool can_fault)
 {
 	vm_paddr_t paddr;
+	vmem_addr_t addr;
 	bool needs_mapping;
 	int error __diagused, i;
 
@@ -9636,11 +9637,12 @@ pmap_map_io_transient(vm_page_t page[], vm_offset_t vaddr[], int count,
 		paddr = VM_PAGE_TO_PHYS(page[i]);
 		if (__predict_false(!PHYS_IN_DMAP(paddr))) {
 			error = vmem_alloc(kernel_arena, PAGE_SIZE,
-			    M_BESTFIT | M_WAITOK, &vaddr[i]);
+			    M_BESTFIT | M_WAITOK, &addr);
 			KASSERT(error == 0, ("vmem_alloc failed: %d", error));
+			vaddr[i] = (void *)addr;
 			needs_mapping = true;
 		} else {
-			vaddr[i] = PHYS_TO_DMAP(paddr);
+			vaddr[i] = (void *)PHYS_TO_DMAP(paddr);
 		}
 	}
 
@@ -9662,7 +9664,7 @@ pmap_map_io_transient(vm_page_t page[], vm_offset_t vaddr[], int count,
 }
 
 void
-pmap_unmap_io_transient(vm_page_t page[], vm_offset_t vaddr[], int count,
+pmap_unmap_io_transient(vm_page_t page[], void *vaddr[], int count,
     bool can_fault)
 {
 	vm_paddr_t paddr;
diff --git a/sys/arm64/arm64/uio_machdep.c b/sys/arm64/arm64/uio_machdep.c
index 1c12940419cc..976055a69491 100644
--- a/sys/arm64/arm64/uio_machdep.c
+++ b/sys/arm64/arm64/uio_machdep.c
@@ -55,8 +55,8 @@ uiomove_fromphys(vm_page_t ma[], vm_offset_t offset, int n, struct uio *uio)
 {
 	struct thread *td = curthread;
 	struct iovec *iov;
-	void *cp;
-	vm_offset_t page_offset, vaddr;
+	void *cp, *vaddr;
+	vm_offset_t page_offset;
 	size_t cnt;
 	int error = 0;
 	int save = 0;
diff --git a/sys/arm64/include/pmap.h b/sys/arm64/include/pmap.h
index 599e5a7f46ef..2ee70fc754da 100644
--- a/sys/arm64/include/pmap.h
+++ b/sys/arm64/include/pmap.h
@@ -166,8 +166,8 @@ void	*pmap_mapbios(vm_paddr_t, vm_size_t);
 void	pmap_unmapdev(void *, vm_size_t);
 void	pmap_unmapbios(void *, vm_size_t);
 
-bool	pmap_map_io_transient(vm_page_t *, vm_offset_t *, int, bool);
-void	pmap_unmap_io_transient(vm_page_t *, vm_offset_t *, int, bool);
+bool	pmap_map_io_transient(vm_page_t *, void **, int, bool);
+void	pmap_unmap_io_transient(vm_page_t *, void **, int, bool);
 
 bool	pmap_get_tables(pmap_t, vm_offset_t, pd_entry_t **, pd_entry_t **,
     pd_entry_t **, pt_entry_t **);
diff --git a/sys/dev/cxgbe/cxgbei/icl_cxgbei.c b/sys/dev/cxgbe/cxgbei/icl_cxgbei.c
index 2e7767a0fc27..09023b00248e 100644
--- a/sys/dev/cxgbe/cxgbei/icl_cxgbei.c
+++ b/sys/dev/cxgbe/cxgbei/icl_cxgbei.c
@@ -622,7 +622,7 @@ icl_cxgbei_conn_pdu_append_bio(struct icl_conn *ic, struct icl_pdu *ip,
 {
 	struct icl_cxgbei_pdu *icp = ip_to_icp(ip);
 	struct mbuf *m, *m_tail;
-	vm_offset_t vaddr;
+	void *vaddr;
 	size_t page_offset, todo, mtodo;
 	bool mapped;
 	int i;
@@ -810,7 +810,7 @@ icl_cxgbei_conn_pdu_get_bio(struct icl_conn *ic, struct icl_pdu *ip,
     size_t pdu_off, struct bio *bp, size_t bio_off, size_t len)
 {
 	struct icl_cxgbei_pdu *icp = ip_to_icp(ip);
-	vm_offset_t vaddr;
+	void *vaddr;
 	size_t page_offset, todo;
 	bool mapped;
 	int i;
diff --git a/sys/riscv/include/pmap.h b/sys/riscv/include/pmap.h
index b7be1a0a262f..50496bb9ff20 100644
--- a/sys/riscv/include/pmap.h
+++ b/sys/riscv/include/pmap.h
@@ -150,8 +150,8 @@ void	*pmap_mapbios(vm_paddr_t, vm_size_t);
 void	pmap_unmapdev(void *, vm_size_t);
 void	pmap_unmapbios(void *, vm_size_t);
 
-bool	pmap_map_io_transient(vm_page_t *, vm_offset_t *, int, bool);
-void	pmap_unmap_io_transient(vm_page_t *, vm_offset_t *, int, bool);
+bool	pmap_map_io_transient(vm_page_t *, void **, int, bool);
+void	pmap_unmap_io_transient(vm_page_t *, void **, int, bool);
 
 bool	pmap_get_tables(pmap_t, vm_offset_t, pd_entry_t **, pd_entry_t **,
     pt_entry_t **);
diff --git a/sys/riscv/riscv/pmap.c b/sys/riscv/riscv/pmap.c
index 90493418c499..f4c5a1eab6ff 100644
--- a/sys/riscv/riscv/pmap.c
+++ b/sys/riscv/riscv/pmap.c
@@ -5300,10 +5300,11 @@ pmap_align_superpage(vm_object_t object, vm_ooffset_t offset,
  *
  */
 bool
-pmap_map_io_transient(vm_page_t page[], vm_offset_t vaddr[], int count,
+pmap_map_io_transient(vm_page_t page[], void *vaddr[], int count,
     bool can_fault)
 {
 	vm_paddr_t paddr;
+	vmem_addr_t addr;
 	bool needs_mapping;
 	int error __diagused, i;
 
@@ -5316,11 +5317,12 @@ pmap_map_io_transient(vm_page_t page[], vm_offset_t vaddr[], int count,
 		paddr = VM_PAGE_TO_PHYS(page[i]);
 		if (__predict_false(paddr >= DMAP_MAX_PHYSADDR)) {
 			error = vmem_alloc(kernel_arena, PAGE_SIZE,
-			    M_BESTFIT | M_WAITOK, &vaddr[i]);
+			    M_BESTFIT | M_WAITOK, &addr);
 			KASSERT(error == 0, ("vmem_alloc failed: %d", error));
+			vaddr[i] = (void *)addr;
 			needs_mapping = true;
 		} else {
-			vaddr[i] = PHYS_TO_DMAP(paddr);
+			vaddr[i] = (void *)PHYS_TO_DMAP(paddr);
 		}
 	}
 
@@ -5342,7 +5344,7 @@ pmap_map_io_transient(vm_page_t page[], vm_offset_t vaddr[], int count,
 }
 
 void
-pmap_unmap_io_transient(vm_page_t page[], vm_offset_t vaddr[], int count,
+pmap_unmap_io_transient(vm_page_t page[], void *vaddr[], int count,
     bool can_fault)
 {
 	vm_paddr_t paddr;
diff --git a/sys/riscv/riscv/uio_machdep.c b/sys/riscv/riscv/uio_machdep.c
index 002685c98ccf..f171feb1a4bd 100644
--- a/sys/riscv/riscv/uio_machdep.c
+++ b/sys/riscv/riscv/uio_machdep.c
@@ -55,8 +55,8 @@ uiomove_fromphys(vm_page_t ma[], vm_offset_t offset, int n, struct uio *uio)
 {
 	struct thread *td = curthread;
 	struct iovec *iov;
-	void *cp;
-	vm_offset_t page_offset, vaddr;
+	void *cp, *vaddr;
+	vm_offset_t page_offset;
 	size_t cnt;
 	int error = 0;
 	int save = 0;


home | help

Want to link to this message? Use this
URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?69ea61ed.4573b.177c7996>