=3D"caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: =
12px; font-style: normal; font-variant-caps: normal; font-weight: 400; =
letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; =
text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; =
-webkit-text-stroke-width: 0px; text-decoration: none; float: none; =
display: inline !important;">On Thursday, April 23, 2026, John Baldwin =
<jhb@freebsd.org> wrote:
The branch = main has been updated by jhb:
URL: https://cgit.FreeBSD.org/src/commit/?id=3D fe9f= 0b18bf6a1f881fbe57da716ea4 29acd539c1
commit = fe9f0b18bf6a1f881fbe57da716ea429acd539c1
Author: = John Baldwin <jhb@FreeBSD.org>
AuthorDate: 2026-04-23 = 17:05:53 +0000
Commit: John Baldwin = <jhb@FreeBSD.org>
CommitDate: 2026-04-23 17:05:53 = +0000
busdma: Use char * instead = of vm_offset_t for bounce page kernel pointers
Effort: = CHERI upstreaming
Reviewed by: = kib
Sponsored by: = AFRL, DARPA
Pull Request: = https://github.com/freebsd/freebsd-src/pull/2068
---
sys/arm/arm/busdma_machdep.c = | 18 = ++++++++----------
sys/arm64/arm64/busdma_bounce.c = | 18 = ++++++++----------
sys/kern/subr_busdma_bounce.c = | 30 = +++++++++++++++---------------
sys/powerpc/powerpc/busdma_ma= chdep.c | 20 = +++++++++-----------
sys/riscv/riscv/busdma_bounce.c = | 18 = ++++++++----------
sys/x86/x86/busdma_bounce.c = | 26 +++++++++++---------------
6 files = changed, 59 insertions(+), 71 deletions(-)
diff --git = a/sys/arm/arm/busdma_machdep.c b/sys/arm/arm/busdma_machdep.c
index = 3c65cb8ebbf4..81b8b4a2883a 100644
--- = a/sys/arm/arm/busdma_machdep.c
+++ = b/sys/arm/arm/busdma_machdep.c
@@ -1002,7 +1002,7 @@ = _bus_dmamap_load_buffer(bus_dma_tag_t dmat, bus_dmamap_t map, void = *buf,
= if = (map->pagesneeded !=3D 0 && must_bounce(dmat, map, = curaddr,
= sgsize)) = {
- = curaddr =3D add_bounce_page(dmat, map, = (vm_offset_t)kvaddr, curaddr,
+ = curaddr =3D = add_bounce_page(dmat, map, kvaddr, curaddr,
= = sgsize);
= } else if ((dmat->flags = & BUS_DMA_COHERENT) =3D=3D 0) {
= if (map->sync_count > = 0) {
@@ -1199,18 +1199,17 @@ bus_dmamap_sync(bus_dma_tag_t dmat, = bus_dmamap_t map, bus_dmasync_op_t op)
= if (op & = BUS_DMASYNC_PREWRITE) {
= while (bpage !=3D NULL) = {
= tempvaddr =3D = NULL;
- = datavaddr =3D (void = *)bpage->datavaddr;
+ = = datavaddr =3D bpage->datavaddr;
= = if = (datavaddr =3D=3D NULL) {
= = tempvaddr =3D = pmap_quick_enter_page(
= = bpage->datapage);
 = ; = datavaddr =3D tempvaddr + = bpage->dataoffs;
= }
- = = bcopy(datavaddr, (void *)bpage->vaddr,
- = = = bpage->datacount);
+ = = bcopy(datavaddr, bpage->vaddr, bpage->datacount);
= = if (tempvaddr !=3D = NULL)
= = pmap_quick_remove_page(t= empvaddr);
= if ((dmat->flags & = BUS_DMA_COHERENT) =3D=3D 0)
- = = = dcache_wb_poc(bpage->vaddr,
+ = = = dcache_wb_poc((vm_offset_t)bpage->vaddr,
= = = bpage->busaddr, = bpage->datacount);
= = bpage =3D = STAILQ_NEXT(bpage, links);
= }
@@ -1232,7 +1231,7 @@ = bus_dmamap_sync(bus_dma_tag_t dmat, bus_dmamap_t map, bus_dmasync_op_t = op)
= bpage =3D = STAILQ_FIRST(&map->bpages);
= while (bpage !=3D NULL) = {
= if ((dmat->flags & = BUS_DMA_COHERENT) =3D=3D 0)
- = = = dcache_inv_poc_dma(bpage->vaddr,
+ = = = dcache_inv_poc_dma((vm_offset_t)bpage->vaddr,
= = = bpage->busaddr, = bpage->datacount);
= = bpage =3D = STAILQ_NEXT(bpage, links);
= }
@@ -1250,17 +1249,16 = @@ bus_dmamap_sync(bus_dma_tag_t dmat, bus_dmamap_t map, = bus_dmasync_op_t op)
= if (op & = BUS_DMASYNC_POSTREAD) {
= while (bpage !=3D NULL) = {
= if ((dmat->flags & = BUS_DMA_COHERENT) =3D=3D 0)
- = = = dcache_inv_poc(bpage->vaddr,
+ = = = dcache_inv_poc((vm_offset_t)bpage->vaddr,
= = = bpage->busaddr, = bpage->datacount);
= = tempvaddr =3D = NULL;
- = datavaddr =3D (void = *)bpage->datavaddr;
+ = = datavaddr =3D bpage->datavaddr;
= = if = (datavaddr =3D=3D NULL) {
= = tempvaddr =3D = pmap_quick_enter_page(
= = bpage->datapage);
 = ; = datavaddr =3D tempvaddr + = bpage->dataoffs;
= }
- = = bcopy((void *)bpage->vaddr, datavaddr,
- = = = bpage->datacount);
+ = = bcopy(bpage->vaddr, datavaddr, bpage->datacount);
= = if (tempvaddr !=3D = NULL)
= = pmap_quick_remove_page(t= empvaddr);
= bpage =3D = STAILQ_NEXT(bpage, links);
diff --git = a/sys/arm64/arm64/busdma_bounce.c = b/sys/arm64/arm64/busdma_ bounce.c
index = ad46e26e406f..74fa611e6d1a 100644
--- = a/sys/arm64/arm64/busdma_bounce.c
+++ = b/sys/arm64/arm64/busdma_bounce.c
@@ -868,7 +868,7 @@ = bounce_bus_dmamap_load_buffer(bus_dma_tag_t dmat, bus_dmamap_t map, = void *buf,
= KASSERT(dmat->common.align= ment <=3D PAGE_SIZE,
= ("bounced buffer cannot = have alignment bigger "
= "than PAGE_SIZE: %lu", = dmat->common.alignment));
- = curaddr =3D = add_bounce_page(dmat, map, (vm_offset_t)kvaddr, curaddr,
+ = = curaddr =3D add_bounce_page(dmat, map, kvaddr, curaddr,
= = sgsize);
= } else if ((map->flags = & DMAMAP_COHERENT) =3D=3D 0) {
= if (map->sync_count > = 0) {
@@ -1047,19 +1047,18 @@ = bounce_bus_dmamap_sync(bus_dma_tag_t dmat, bus_dmamap_t = map,
if ((op & = BUS_DMASYNC_PREWRITE) !=3D 0) {
= while (bpage !=3D NULL) = {
= tempvaddr =3D = NULL;
- = datavaddr =3D (void = *)bpage->datavaddr;
+ = = datavaddr =3D bpage->datavaddr;
= = if = (datavaddr =3D=3D NULL) {
= = tempvaddr =3D = pmap_quick_enter_page(
= = bpage->datapage);
 = ; = datavaddr =3D tempvaddr + = bpage->dataoffs;
= }
- = = bcopy(datavaddr,
- = = (void *)bpage->vaddr, = bpage->datacount);
+ = = bcopy(datavaddr, bpage->vaddr, bpage->datacount);
= = if (tempvaddr !=3D = NULL)
= = pmap_quick_remove_page(t= empvaddr);
= if ((map->flags & = DMAMAP_COHERENT) =3D=3D 0)
- = = cpu_dcache_wb_range((void = *)bpage->vaddr,
+ = = cpu_dcache_wb_range(bpage->vaddr,
= = = bpage->datacount);
&nbs= p; = bpage =3D = STAILQ_NEXT(bpage, links);
= }
@@ -1067,7 +1066,7 @@ = bounce_bus_dmamap_sync(bus_dma_tag_t dmat, bus_dmamap_t = map,
} else if ((op & = BUS_DMASYNC_PREREAD) !=3D 0) {
= while (bpage !=3D NULL) = {
= if ((map->flags & = DMAMAP_COHERENT) =3D=3D 0)
- = = cpu_dcache_wbinv_range((void = *)bpage->vaddr,
+ = = = cpu_dcache_wbinv_range(bpage->vaddr,
= = = bpage->datacount);
&nbs= p; = bpage =3D = STAILQ_NEXT(bpage, links);
= }
@@ -1076,18 +1075,17 = @@ bounce_bus_dmamap_sync(bus_dma_tag_t dmat, bus_dmamap_t = map,
if ((op & = BUS_DMASYNC_POSTREAD) !=3D 0) {
= while (bpage !=3D NULL) = {
= if ((map->flags & = DMAMAP_COHERENT) =3D=3D 0)
- = = cpu_dcache_inv_range((void = *)bpage->vaddr,
+ = = cpu_dcache_inv_range(bpage->vaddr,
= = = bpage->datacount);
&nbs= p; = tempvaddr =3D = NULL;
- = datavaddr =3D (void = *)bpage->datavaddr;
+ = = datavaddr =3D bpage->datavaddr;
= = if = (datavaddr =3D=3D NULL) {
= = tempvaddr =3D = pmap_quick_enter_page(
= = bpage->datapage);
 = ; = datavaddr =3D tempvaddr + = bpage->dataoffs;
= }
- = = bcopy((void *)bpage->vaddr,
- = = datavaddr, = bpage->datacount);
+ = = bcopy(bpage->vaddr, datavaddr, = bpage->datacount);
= = if (tempvaddr = !=3D NULL)
= = pmap_quick_remove_page(t= empvaddr);
diff --git a/sys/kern/subr_busdma_bounce.c = b/sys/kern/subr_busdma_bounce. c
index 60fe2fc6b2a6..2774128a1ae5 = 100644
--- a/sys/kern/subr_busdma_bounce.c
+++ = b/sys/kern/subr_busdma_bounce.c
@@ -49,9 +49,9 = @@
#include <sys/sched.h>
struct bounce_page = {
- vm_offset_t = vaddr; /* kva of bounce buffer = */
+ char = *vaddr; /* kva of bounce buffer = */
bus_addr_t = busaddr; /* Physical address = */
- vm_offset_t = datavaddr; /* kva of client data */
+ = char = *datavaddr; /* kva of client data */
#if = defined(__amd64__) || defined(__i386__)
= vm_page_t = datapage[2]; /* physical page(s) of = client data */
#else
@@ -282,18 +282,18 @@ = alloc_bounce_pages(bus_dma_tag_t dmat, u_int numpages)
= if (bpage =3D=3D = NULL)
= break;
#ifdef = dmat_domain
- = bpage->vaddr =3D = (vm_offset_t)contigmalloc_domainset(PAGE_SIZE,
+ = bpage->vaddr =3D = contigmalloc_domainset(PAGE_SIZE,
= M_BOUNCE, = DOMAINSET_PREF(bz->domain), M_NOWAIT,
= 0ul, bz->lowaddr, = PAGE_SIZE, 0);
#else
- = bpage->vaddr =3D = (vm_offset_t)contigmalloc(PAGE_SIZE, M_BOUNCE,
+ = bpage->vaddr =3D = contigmalloc(PAGE_SIZE, M_BOUNCE,
= M_NOWAIT, 0ul, = bz->lowaddr, PAGE_SIZE, 0);
#endif
- = if (bpage->vaddr =3D=3D 0) = {
+ if = (bpage->vaddr =3D=3D NULL) {
= free(bpage, = M_BUSDMA);
= break;
= }
- = bpage->busaddr =3D = pmap_kextract(bpage->vaddr);
+ = bpage->busaddr =3D = pmap_kextract((vm_offset_t)bpage->vaddr);
= mtx_lock(&bounce_lock); STAILQ_INSERT_TAIL(&bz-&g= t;bounce_page_list, bpage, links);
= total_bpages++;
@@ = -327,11 +327,11 @@ reserve_bounce_pages(bus_dma_tag_t dmat, = bus_dmamap_t map, int commit)
#if defined(__amd64__) || = defined(__i386__)
static = bus_addr_t
-add_bounce_page(bus_dma_tag_t dmat, bus_dmamap_t map, = vm_offset_t vaddr,
+add_bounce_page(bus_dma_tag_t dmat, bus_dmamap_t = map, void *vaddr,
vm_paddr_t addr1, vm_paddr_t = addr2, bus_size_t size)
#else
static = bus_addr_t
-add_bounce_page(bus_dma_tag_t dmat, bus_dmamap_t map, = vm_offset_t vaddr,
+add_bounce_page(bus_dma_tag_t dmat, bus_dmamap_t = map, void *vaddr,
bus_addr_t addr, bus_size_t = size)
#endif
{
@@ -370,13 +370,13 @@ = add_bounce_page(bus_dma_tag_t dmat, bus_dmamap_t map, vm_offset_t = vaddr,
if (dmat_flags(dmat) & = BUS_DMA_KEEP_PG_OFFSET) {
= /* Page = offset needs to be preserved. */
#if defined(__amd64__) || = defined(__i386__)
- = bpage->vaddr |=3D addr1 & PAGE_MASK;
- = bpage->busaddr |=3D addr1 = & PAGE_MASK;
+ = bpage->vaddr +=3D addr1 & PAGE_MASK;
+ = bpage->busaddr +=3D addr1 = & PAGE_MASK;
= KASSERT(addr2 = =3D=3D 0,
("Trying to bounce multiple = pages with BUS_DMA_KEEP_PG_OFFSET"));