Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 23 Apr 2026 18:16:12 +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: 573e6313bc3b - main - sf_buf_kva: Return a pointer instead of a vm_offset_t
Message-ID:  <69ea61ec.45142.5bdc5755@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=573e6313bc3b3d7d8da4531fbfaa2763dbe209a7

commit 573e6313bc3b3d7d8da4531fbfaa2763dbe209a7
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

    sf_buf_kva: Return a pointer instead of a vm_offset_t
    
    This removes the need for several casts to pointer in callers.
    
    Effort:         CHERI upstreaming
    Reviewed by:    kib
    Sponsored by:   AFRL, DARPA
    Pull Request:   https://github.com/freebsd/freebsd-src/pull/2068
---
 sys/amd64/include/sf_buf.h                             | 4 ++--
 sys/arm64/include/sf_buf.h                             | 4 ++--
 sys/cddl/compat/opensolaris/sys/vm.h                   | 2 +-
 sys/compat/linuxkpi/common/include/linux/highmem.h     | 2 +-
 sys/compat/linuxkpi/common/include/linux/scatterlist.h | 2 +-
 sys/dev/drm2/ttm/ttm_bo_util.c                         | 2 +-
 sys/dev/ti/if_ti.c                                     | 6 +++---
 sys/kern/imgact_elf.c                                  | 2 +-
 sys/kern/kern_exec.c                                   | 2 +-
 sys/kern/kern_mbuf.c                                   | 2 +-
 sys/kern/kern_sendfile.c                               | 2 +-
 sys/net/bpf_zerocopy.c                                 | 3 +--
 sys/riscv/include/sf_buf.h                             | 4 ++--
 sys/sys/sf_buf.h                                       | 6 +++---
 sys/vm/vnode_pager.c                                   | 2 +-
 sys/x86/iommu/amd_idpgtbl.c                            | 2 +-
 sys/x86/iommu/intel_idpgtbl.c                          | 2 +-
 sys/x86/iommu/iommu_utils.c                            | 2 +-
 18 files changed, 25 insertions(+), 26 deletions(-)

diff --git a/sys/amd64/include/sf_buf.h b/sys/amd64/include/sf_buf.h
index 4a64928ae141..e5e23d47ae91 100644
--- a/sys/amd64/include/sf_buf.h
+++ b/sys/amd64/include/sf_buf.h
@@ -36,11 +36,11 @@
  * That pointer references the vm_page that is "mapped" by the sf_buf.  The
  * actual mapping is provided by the direct virtual-to-physical mapping.
  */
-static inline vm_offset_t
+static inline void *
 sf_buf_kva(struct sf_buf *sf)
 {
 
-	return (PHYS_TO_DMAP(VM_PAGE_TO_PHYS((vm_page_t)sf)));
+	return ((void *)PHYS_TO_DMAP(VM_PAGE_TO_PHYS((vm_page_t)sf)));
 }
 
 static inline vm_page_t
diff --git a/sys/arm64/include/sf_buf.h b/sys/arm64/include/sf_buf.h
index 00ed0e9d7456..c66095983bce 100644
--- a/sys/arm64/include/sf_buf.h
+++ b/sys/arm64/include/sf_buf.h
@@ -37,11 +37,11 @@
  * That pointer references the vm_page that is "mapped" by the sf_buf.  The
  * actual mapping is provided by the direct virtual-to-physical mapping.  
  */
-static inline vm_offset_t
+static inline void *
 sf_buf_kva(struct sf_buf *sf)
 {
 
-	return (PHYS_TO_DMAP(VM_PAGE_TO_PHYS((vm_page_t)sf)));
+	return ((void *)PHYS_TO_DMAP(VM_PAGE_TO_PHYS((vm_page_t)sf)));
 }
 
 static inline vm_page_t
diff --git a/sys/cddl/compat/opensolaris/sys/vm.h b/sys/cddl/compat/opensolaris/sys/vm.h
index cddf84358a8c..c4bb10bc030f 100644
--- a/sys/cddl/compat/opensolaris/sys/vm.h
+++ b/sys/cddl/compat/opensolaris/sys/vm.h
@@ -45,7 +45,7 @@ static inline caddr_t
 zfs_map_page(vm_page_t pp, struct sf_buf **sfp)
 {
 	*sfp = sf_buf_alloc(pp, 0);
-	return ((caddr_t)sf_buf_kva(*sfp));
+	return (sf_buf_kva(*sfp));
 }
 
 static inline void
diff --git a/sys/compat/linuxkpi/common/include/linux/highmem.h b/sys/compat/linuxkpi/common/include/linux/highmem.h
index 294b2666031b..1374712735ac 100644
--- a/sys/compat/linuxkpi/common/include/linux/highmem.h
+++ b/sys/compat/linuxkpi/common/include/linux/highmem.h
@@ -70,7 +70,7 @@ kmap(struct page *page)
 			sched_unpin();
 			return (NULL);
 		}
-		return ((void *)sf_buf_kva(sf));
+		return (sf_buf_kva(sf));
 	}
 }
 
diff --git a/sys/compat/linuxkpi/common/include/linux/scatterlist.h b/sys/compat/linuxkpi/common/include/linux/scatterlist.h
index 537f5bebc5aa..775ed499a7d0 100644
--- a/sys/compat/linuxkpi/common/include/linux/scatterlist.h
+++ b/sys/compat/linuxkpi/common/include/linux/scatterlist.h
@@ -654,7 +654,7 @@ sg_pcopy_to_buffer(struct scatterlist *sgl, unsigned int nents,
 			sf = sf_buf_alloc(page, SFB_CPUPRIVATE | SFB_NOWAIT);
 			if (sf == NULL)
 				break;
-			vaddr = (char *)sf_buf_kva(sf);
+			vaddr = sf_buf_kva(sf);
 		} else
 			vaddr = (char *)PHYS_TO_DMAP(page_to_phys(page));
 		memcpy(buf, vaddr + sg->offset + offset, len);
diff --git a/sys/dev/drm2/ttm/ttm_bo_util.c b/sys/dev/drm2/ttm/ttm_bo_util.c
index 3948075ad104..9d3f4103f82e 100644
--- a/sys/dev/drm2/ttm/ttm_bo_util.c
+++ b/sys/dev/drm2/ttm/ttm_bo_util.c
@@ -500,7 +500,7 @@ static int ttm_bo_kmap_ttm(struct ttm_buffer_object *bo,
 		map->bo_kmap_type = ttm_bo_map_kmap;
 		map->page = ttm->pages[start_page];
 		map->sf = sf_buf_alloc(map->page, 0);
-		map->virtual = (void *)sf_buf_kva(map->sf);
+		map->virtual = sf_buf_kva(map->sf);
 	} else {
 		/*
 		 * We need to use vmap to get the desired page protection
diff --git a/sys/dev/ti/if_ti.c b/sys/dev/ti/if_ti.c
index d6d5adda7a41..a89a9d5b5422 100644
--- a/sys/dev/ti/if_ti.c
+++ b/sys/dev/ti/if_ti.c
@@ -1635,10 +1635,10 @@ ti_newbuf_jumbo(struct ti_softc *sc, int idx, struct mbuf *m_old)
 		}
 		for (i = 0; i < NPAYLOAD; i++){
 		/* Attach the buffer to the mbuf. */
-			m[i]->m_data = (void *)sf_buf_kva(sf[i]);
+			m[i]->m_data = sf_buf_kva(sf[i]);
 			m[i]->m_len = PAGE_SIZE;
 			MEXTADD(m[i], sf_buf_kva(sf[i]), PAGE_SIZE,
-			    sf_mext_free, (void*)sf_buf_kva(sf[i]), sf[i],
+			    sf_mext_free, sf_buf_kva(sf[i]), sf[i],
 			    0, EXT_DISPOSABLE);
 			m[i]->m_next = m[i+1];
 		}
@@ -1703,7 +1703,7 @@ nobufs:
 		if (m[i])
 			m_freem(m[i]);
 		if (sf[i])
-			sf_mext_free((void *)sf_buf_kva(sf[i]), sf[i]);
+			sf_mext_free(sf_buf_kva(sf[i]), sf[i]);
 	}
 	return (ENOBUFS);
 }
diff --git a/sys/kern/imgact_elf.c b/sys/kern/imgact_elf.c
index c91fd8089487..af0841c75549 100644
--- a/sys/kern/imgact_elf.c
+++ b/sys/kern/imgact_elf.c
@@ -708,7 +708,7 @@ __elfN(load_section)(const struct image_params *imgp, vm_ooffset_t offset,
 			return (EIO);
 
 		/* send the page fragment to user space */
-		error = copyout((caddr_t)sf_buf_kva(sf), (caddr_t)map_addr,
+		error = copyout(sf_buf_kva(sf), (caddr_t)map_addr,
 		    copy_len);
 		vm_imgact_unmap_page(sf);
 		if (error != 0)
diff --git a/sys/kern/kern_exec.c b/sys/kern/kern_exec.c
index 2bdd6faa025a..20d022050803 100644
--- a/sys/kern/kern_exec.c
+++ b/sys/kern/kern_exec.c
@@ -1097,7 +1097,7 @@ exec_map_first_page(struct image_params *imgp)
 	if (error != VM_PAGER_OK)
 		return (EIO);
 	imgp->firstpage = sf_buf_alloc(m, 0);
-	imgp->image_header = (char *)sf_buf_kva(imgp->firstpage);
+	imgp->image_header = sf_buf_kva(imgp->firstpage);
 
 	return (0);
 }
diff --git a/sys/kern/kern_mbuf.c b/sys/kern/kern_mbuf.c
index 90af03e29dfb..2741778414f4 100644
--- a/sys/kern/kern_mbuf.c
+++ b/sys/kern/kern_mbuf.c
@@ -1019,7 +1019,7 @@ _mb_unmapped_to_ext(struct mbuf *m, struct mbuf **mres)
 			goto fail;
 
 		ref_inc++;
-		m_extadd(m_new, (char *)sf_buf_kva(sf), PAGE_SIZE,
+		m_extadd(m_new, sf_buf_kva(sf), PAGE_SIZE,
 		    mb_unmapped_free_mext, sf, mref, m->m_flags & M_RDONLY,
 		    EXT_SFBUF);
 		m_new->m_data += segoff;
diff --git a/sys/kern/kern_sendfile.c b/sys/kern/kern_sendfile.c
index a4178f5b9b2d..9992b83ad6a8 100644
--- a/sys/kern/kern_sendfile.c
+++ b/sys/kern/kern_sendfile.c
@@ -1030,7 +1030,7 @@ vn_sendfile(struct file *fp, int sockfd, struct uio *hdr_uio,
 			}
 
 			m0 = m_get(M_WAITOK, MT_DATA);
-			m0->m_ext.ext_buf = (char *)sf_buf_kva(sf);
+			m0->m_ext.ext_buf = sf_buf_kva(sf);
 			m0->m_ext.ext_size = PAGE_SIZE;
 			m0->m_ext.ext_arg1 = sf;
 			m0->m_ext.ext_type = EXT_SFBUF;
diff --git a/sys/net/bpf_zerocopy.c b/sys/net/bpf_zerocopy.c
index dee477d47966..63d572c11865 100644
--- a/sys/net/bpf_zerocopy.c
+++ b/sys/net/bpf_zerocopy.c
@@ -220,8 +220,7 @@ zbuf_setup(struct thread *td, vm_offset_t uaddr, size_t len,
 			goto error;
 		}
 	}
-	zb->zb_header =
-	    (struct bpf_zbuf_header *)sf_buf_kva(zb->zb_pages[0]);
+	zb->zb_header = sf_buf_kva(zb->zb_pages[0]);
 	bzero(zb->zb_header, sizeof(*zb->zb_header));
 	*zbp = zb;
 	return (0);
diff --git a/sys/riscv/include/sf_buf.h b/sys/riscv/include/sf_buf.h
index 380f37d45177..293b44726a7c 100644
--- a/sys/riscv/include/sf_buf.h
+++ b/sys/riscv/include/sf_buf.h
@@ -33,11 +33,11 @@
  * That pointer references the vm_page that is "mapped" by the sf_buf.  The
  * actual mapping is provided by the direct virtual-to-physical mapping.  
  */
-static inline vm_offset_t
+static inline void *
 sf_buf_kva(struct sf_buf *sf)
 {
 
-	return (PHYS_TO_DMAP(VM_PAGE_TO_PHYS((vm_page_t)sf)));
+	return ((void *)PHYS_TO_DMAP(VM_PAGE_TO_PHYS((vm_page_t)sf)));
 }
 
 static inline vm_page_t
diff --git a/sys/sys/sf_buf.h b/sys/sys/sf_buf.h
index 173ec161ab60..8eebfd82afdb 100644
--- a/sys/sys/sf_buf.h
+++ b/sys/sys/sf_buf.h
@@ -110,13 +110,13 @@ struct sf_buf *sf_buf_alloc(struct vm_page *, int);
 void sf_buf_free(struct sf_buf *);
 void sf_buf_ref(struct sf_buf *);
 
-static inline vm_offset_t
+static inline void *
 sf_buf_kva(struct sf_buf *sf)
 {
 	if (PMAP_HAS_DMAP)
-		return (PHYS_TO_DMAP(VM_PAGE_TO_PHYS((vm_page_t)sf)));
+		return ((void *)PHYS_TO_DMAP(VM_PAGE_TO_PHYS((vm_page_t)sf)));
 
-        return (sf->kva);
+        return ((void *)sf->kva);
 }
 
 static inline vm_page_t
diff --git a/sys/vm/vnode_pager.c b/sys/vm/vnode_pager.c
index 3504c90821e5..072778f536cd 100644
--- a/sys/vm/vnode_pager.c
+++ b/sys/vm/vnode_pager.c
@@ -786,7 +786,7 @@ vnode_pager_input_old(vm_object_t object, vm_page_t m)
 		 */
 		sf = sf_buf_alloc(m, 0);
 
-		aiov.iov_base = (caddr_t)sf_buf_kva(sf);
+		aiov.iov_base = sf_buf_kva(sf);
 		aiov.iov_len = size;
 		auio.uio_iov = &aiov;
 		auio.uio_iovcnt = 1;
diff --git a/sys/x86/iommu/amd_idpgtbl.c b/sys/x86/iommu/amd_idpgtbl.c
index 4ed73675bd41..007883ccdaa9 100644
--- a/sys/x86/iommu/amd_idpgtbl.c
+++ b/sys/x86/iommu/amd_idpgtbl.c
@@ -138,7 +138,7 @@ amdiommu_pgtbl_map_pte(struct amdiommu_domain *domain, iommu_gaddr_t base,
 
 	idx = pglvl_pgtbl_get_pindex(domain->pglvl, base, lvl);
 	if (*sf != NULL && idx == *idxp) {
-		pte = (iommu_pte_t *)sf_buf_kva(*sf);
+		pte = sf_buf_kva(*sf);
 	} else {
 		if (*sf != NULL)
 			iommu_unmap_pgtbl(*sf);
diff --git a/sys/x86/iommu/intel_idpgtbl.c b/sys/x86/iommu/intel_idpgtbl.c
index e13555cdaaba..4652abb3507d 100644
--- a/sys/x86/iommu/intel_idpgtbl.c
+++ b/sys/x86/iommu/intel_idpgtbl.c
@@ -338,7 +338,7 @@ dmar_pgtbl_map_pte(struct dmar_domain *domain, iommu_gaddr_t base, int lvl,
 
 	idx = pglvl_pgtbl_get_pindex(domain->pglvl, base, lvl);
 	if (*sf != NULL && idx == *idxp) {
-		pte = (iommu_pte_t *)sf_buf_kva(*sf);
+		pte = sf_buf_kva(*sf);
 	} else {
 		if (*sf != NULL)
 			iommu_unmap_pgtbl(*sf);
diff --git a/sys/x86/iommu/iommu_utils.c b/sys/x86/iommu/iommu_utils.c
index 2db02a98ca91..d2ff9a985968 100644
--- a/sys/x86/iommu/iommu_utils.c
+++ b/sys/x86/iommu/iommu_utils.c
@@ -173,7 +173,7 @@ iommu_map_pgtbl(vm_object_t obj, vm_pindex_t idx, int flags,
 		VM_OBJECT_WLOCK(obj);
 	else if ((flags & (IOMMU_PGF_WAITOK | IOMMU_PGF_OBJL)) == 0)
 		VM_OBJECT_WUNLOCK(obj);
-	return ((void *)sf_buf_kva(*sf));
+	return (sf_buf_kva(*sf));
 }
 
 void


home | help

Want to link to this message? Use this
URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?69ea61ec.45142.5bdc5755>