git: 573e6313bc3b - main - sf_buf_kva: Return a pointer instead of a vm_offset_t
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Thu, 23 Apr 2026 18:16:12 UTC
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