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)); } voidhome | help
Want to link to this message? Use this
URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?69ea61ec.45142.5bdc5755>
