=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=3Dfe9f= 0b18bf6a1f881fbe57da716ea429acd539c1

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"));

These hunks looks different from the = commit message.

|=3D isn=E2=80= =99t defined for pointers, but +=3D is, and they=E2=80=99re = equivalent
since the LHS is page aligned and the RHS is a page = offset.

Jessica

= = --Apple-Mail=_232F96EC-6D5C-49A3-85AC-DE66E9BE46EC--