Re: git: fe9f0b18bf6a - main - busdma: Use char * instead of vm_offset_t for bounce page kernel pointers

From: Oliver Pinter <oliver.pntr_at_gmail.com>
Date: Tue, 28 Apr 2026 18:43:25 UTC
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=
> fe9f0b18bf6a1f881fbe57da716ea429acd539c1
>
> 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_machdep.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 != 0 && must_bounce(dmat, map,
> curaddr,
>                     sgsize)) {
> -                       curaddr = add_bounce_page(dmat, map,
> (vm_offset_t)kvaddr, curaddr,
> +                       curaddr = add_bounce_page(dmat, map, kvaddr,
> curaddr,
>                             sgsize);
>                 } else if ((dmat->flags & BUS_DMA_COHERENT) == 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 != NULL) {
>                                 tempvaddr = NULL;
> -                               datavaddr = (void *)bpage->datavaddr;
> +                               datavaddr = bpage->datavaddr;
>                                 if (datavaddr == NULL) {
>                                         tempvaddr = pmap_quick_enter_page(
>                                             bpage->datapage);
>                                         datavaddr = tempvaddr +
> bpage->dataoffs;
>                                 }
> -                               bcopy(datavaddr, (void *)bpage->vaddr,
> -                                   bpage->datacount);
> +                               bcopy(datavaddr, bpage->vaddr,
> bpage->datacount);
>                                 if (tempvaddr != NULL)
>                                         pmap_quick_remove_page(tempvaddr);
>                                 if ((dmat->flags & BUS_DMA_COHERENT) == 0)
> -                                       dcache_wb_poc(bpage->vaddr,
> +                                       dcache_wb_poc((vm_offset_t)
> bpage->vaddr,
>                                             bpage->busaddr,
> bpage->datacount);
>                                 bpage = 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 = STAILQ_FIRST(&map->bpages);
>                         while (bpage != NULL) {
>                                 if ((dmat->flags & BUS_DMA_COHERENT) == 0)
> -                                       dcache_inv_poc_dma(bpage->vaddr,
> +                                       dcache_inv_poc_dma((vm_offset_
> t)bpage->vaddr,
>                                             bpage->busaddr,
> bpage->datacount);
>                                 bpage = 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 != NULL) {
>                                 if ((dmat->flags & BUS_DMA_COHERENT) == 0)
> -                                       dcache_inv_poc(bpage->vaddr,
> +                                       dcache_inv_poc((vm_offset_t)
> bpage->vaddr,
>                                             bpage->busaddr,
> bpage->datacount);
>                                 tempvaddr = NULL;
> -                               datavaddr = (void *)bpage->datavaddr;
> +                               datavaddr = bpage->datavaddr;
>                                 if (datavaddr == NULL) {
>                                         tempvaddr = pmap_quick_enter_page(
>                                             bpage->datapage);
>                                         datavaddr = tempvaddr +
> bpage->dataoffs;
>                                 }
> -                               bcopy((void *)bpage->vaddr, datavaddr,
> -                                   bpage->datacount);
> +                               bcopy(bpage->vaddr, datavaddr,
> bpage->datacount);
>                                 if (tempvaddr != NULL)
>                                         pmap_quick_remove_page(tempvaddr);
>                                 bpage = 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.alignment <= PAGE_SIZE,
>                             ("bounced buffer cannot have alignment bigger "
>                             "than PAGE_SIZE: %lu",
> dmat->common.alignment));
> -                       curaddr = add_bounce_page(dmat, map,
> (vm_offset_t)kvaddr, curaddr,
> +                       curaddr = add_bounce_page(dmat, map, kvaddr,
> curaddr,
>                             sgsize);
>                 } else if ((map->flags & DMAMAP_COHERENT) == 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) != 0) {
>                         while (bpage != NULL) {
>                                 tempvaddr = NULL;
> -                               datavaddr = (void *)bpage->datavaddr;
> +                               datavaddr = bpage->datavaddr;
>                                 if (datavaddr == NULL) {
>                                         tempvaddr = pmap_quick_enter_page(
>                                             bpage->datapage);
>                                         datavaddr = tempvaddr +
> bpage->dataoffs;
>                                 }
>
> -                               bcopy(datavaddr,
> -                                   (void *)bpage->vaddr,
> bpage->datacount);
> +                               bcopy(datavaddr, bpage->vaddr,
> bpage->datacount);
>                                 if (tempvaddr != NULL)
>                                         pmap_quick_remove_page(tempvaddr);
>                                 if ((map->flags & DMAMAP_COHERENT) == 0)
> -                                       cpu_dcache_wb_range((void
> *)bpage->vaddr,
> +                                       cpu_dcache_wb_range(bpage->vaddr,
>                                             bpage->datacount);
>                                 bpage = 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) != 0) {
>                         while (bpage != NULL) {
>                                 if ((map->flags & DMAMAP_COHERENT) == 0)
> -                                       cpu_dcache_wbinv_range((void
> *)bpage->vaddr,
> +                                       cpu_dcache_wbinv_range(bpage->
> vaddr,
>                                             bpage->datacount);
>                                 bpage = 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) != 0) {
>                         while (bpage != NULL) {
>                                 if ((map->flags & DMAMAP_COHERENT) == 0)
> -                                       cpu_dcache_inv_range((void
> *)bpage->vaddr,
> +                                       cpu_dcache_inv_range(bpage->vaddr,
>                                             bpage->datacount);
>                                 tempvaddr = NULL;
> -                               datavaddr = (void *)bpage->datavaddr;
> +                               datavaddr = bpage->datavaddr;
>                                 if (datavaddr == NULL) {
>                                         tempvaddr = pmap_quick_enter_page(
>                                             bpage->datapage);
>                                         datavaddr = tempvaddr +
> bpage->dataoffs;
>                                 }
>
> -                               bcopy((void *)bpage->vaddr,
> -                                   datavaddr, bpage->datacount);
> +                               bcopy(bpage->vaddr, datavaddr,
> bpage->datacount);
>
>                                 if (tempvaddr != NULL)
>                                         pmap_quick_remove_page(tempvaddr);
> 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 == NULL)
>                         break;
>  #ifdef dmat_domain
> -               bpage->vaddr = (vm_offset_t)contigmalloc_
> domainset(PAGE_SIZE,
> +               bpage->vaddr = contigmalloc_domainset(PAGE_SIZE,
>                     M_BOUNCE, DOMAINSET_PREF(bz->domain), M_NOWAIT,
>                     0ul, bz->lowaddr, PAGE_SIZE, 0);
>  #else
> -               bpage->vaddr = (vm_offset_t)contigmalloc(PAGE_SIZE,
> M_BOUNCE,
> +               bpage->vaddr = contigmalloc(PAGE_SIZE, M_BOUNCE,
>                     M_NOWAIT, 0ul, bz->lowaddr, PAGE_SIZE, 0);
>  #endif
> -               if (bpage->vaddr == 0) {
> +               if (bpage->vaddr == NULL) {
>                         free(bpage, M_BUSDMA);
>                         break;
>                 }
> -               bpage->busaddr = pmap_kextract(bpage->vaddr);
> +               bpage->busaddr = pmap_kextract((vm_offset_t)bpage->vaddr);
>                 mtx_lock(&bounce_lock);
>                 STAILQ_INSERT_TAIL(&bz->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 |= addr1 & PAGE_MASK;
> -               bpage->busaddr |= addr1 & PAGE_MASK;
> +               bpage->vaddr += addr1 & PAGE_MASK;
> +               bpage->busaddr += addr1 & PAGE_MASK;
>                 KASSERT(addr2 == 0,
>             ("Trying to bounce multiple pages with
> BUS_DMA_KEEP_PG_OFFSET"));


These hunks looks different from the commit message.


>  #else
> -               bpage->vaddr |= addr & PAGE_MASK;
> -               bpage->busaddr |= addr & PAGE_MASK;
> +               bpage->vaddr += addr & PAGE_MASK;
> +               bpage->busaddr += addr & PAGE_MASK;
>  #endif
>         }
>         bpage->datavaddr = vaddr;
> @@ -409,7 +409,7 @@ free_bounce_pages(bus_dma_tag_t dmat, bus_dmamap_t
> map)
>         count = 0;
>         schedule_thread = false;
>         STAILQ_FOREACH(bpage, &map->bpages, links) {
> -               bpage->datavaddr = 0;
> +               bpage->datavaddr = NULL;
>                 bpage->datacount = 0;
>
>                 if (dmat_flags(dmat) & BUS_DMA_KEEP_PG_OFFSET) {
> @@ -419,8 +419,8 @@ free_bounce_pages(bus_dma_tag_t dmat, bus_dmamap_t
> map)
>                          * store a full page of data and/or assume it
>                          * starts on a page boundary.
>                          */
> -                       bpage->vaddr &= ~PAGE_MASK;
> -                       bpage->busaddr &= ~PAGE_MASK;
> +                       bpage->vaddr = trunc_page(bpage->vaddr);
> +                       bpage->busaddr = trunc_page(bpage->busaddr);
>                 }
>                 count++;
>         }
> diff --git a/sys/powerpc/powerpc/busdma_machdep.c
> b/sys/powerpc/powerpc/busdma_machdep.c
> index 56feffde8b37..7fe2fd4ff986 100644
> --- a/sys/powerpc/powerpc/busdma_machdep.c
> +++ b/sys/powerpc/powerpc/busdma_machdep.c
> @@ -613,7 +613,7 @@ _bus_dmamap_load_buffer(bus_dma_tag_t dmat,
>  {
>         bus_size_t sgsize;
>         bus_addr_t curaddr;
> -       vm_offset_t kvaddr, vaddr;
> +       char *kvaddr, *vaddr;
>         int error;
>
>         if (segs == NULL)
> @@ -628,18 +628,18 @@ _bus_dmamap_load_buffer(bus_dma_tag_t dmat,
>                 }
>         }
>
> -       vaddr = (vm_offset_t)buf;
> +       vaddr = buf;
>
>         while (buflen > 0) {
>                 /*
>                  * Get the physical address for this segment.
>                  */
>                 if (pmap == kernel_pmap) {
> -                       curaddr = pmap_kextract(vaddr);
> +                       curaddr = pmap_kextract((vm_offset_t)vaddr);
>                         kvaddr = vaddr;
>                 } else {
> -                       curaddr = pmap_extract(pmap, vaddr);
> -                       kvaddr = 0;
> +                       curaddr = pmap_extract(pmap, (vm_offset_t)vaddr);
> +                       kvaddr = NULL;
>                 }
>
>                 /*
> @@ -733,7 +733,7 @@ bus_dmamap_sync(bus_dma_tag_t dmat, bus_dmamap_t map,
> bus_dmasync_op_t op)
>                 if (op & BUS_DMASYNC_PREWRITE) {
>                         while (bpage != NULL) {
>                                 tempvaddr = NULL;
> -                               datavaddr = (void *)bpage->datavaddr;
> +                               datavaddr = bpage->datavaddr;
>                                 if (datavaddr == NULL) {
>                                         tempvaddr = pmap_quick_enter_page(
>                                             bpage->datapage);
> @@ -741,8 +741,7 @@ bus_dmamap_sync(bus_dma_tag_t dmat, bus_dmamap_t map,
> bus_dmasync_op_t op)
>                                             bpage->dataoffs;
>                                 }
>
> -                               bcopy(datavaddr,
> -                                   (void *)bpage->vaddr,
> bpage->datacount);
> +                               bcopy(datavaddr, bpage->vaddr,
> bpage->datacount);
>
>                                 if (tempvaddr != NULL)
>                                         pmap_quick_remove_page(tempvaddr);
> @@ -754,7 +753,7 @@ bus_dmamap_sync(bus_dma_tag_t dmat, bus_dmamap_t map,
> bus_dmasync_op_t op)
>                 if (op & BUS_DMASYNC_POSTREAD) {
>                         while (bpage != NULL) {
>                                 tempvaddr = NULL;
> -                               datavaddr = (void *)bpage->datavaddr;
> +                               datavaddr = bpage->datavaddr;
>                                 if (datavaddr == NULL) {
>                                         tempvaddr = pmap_quick_enter_page(
>                                             bpage->datapage);
> @@ -762,8 +761,7 @@ bus_dmamap_sync(bus_dma_tag_t dmat, bus_dmamap_t map,
> bus_dmasync_op_t op)
>                                             bpage->dataoffs;
>                                 }
>
> -                               bcopy((void *)bpage->vaddr,
> -                                   datavaddr, bpage->datacount);
> +                               bcopy(bpage->vaddr, datavaddr,
> bpage->datacount);
>
>                                 if (tempvaddr != NULL)
>                                         pmap_quick_remove_page(tempvaddr);
> diff --git a/sys/riscv/riscv/busdma_bounce.c b/sys/riscv/riscv/busdma_
> bounce.c
> index 0f2d592f4e52..452cead3c6b6 100644
> --- a/sys/riscv/riscv/busdma_bounce.c
> +++ b/sys/riscv/riscv/busdma_bounce.c
> @@ -673,7 +673,7 @@ bounce_bus_dmamap_load_buffer(bus_dma_tag_t dmat,
> bus_dmamap_t map, void *buf,
>                     addr_needs_bounce(dmat, curaddr)) {
>                         sgsize = roundup2(sgsize, dmat->common.alignment);
>                         sgsize = MIN(sgsize, buflen);
> -                       curaddr = add_bounce_page(dmat, map,
> (vm_offset_t)kvaddr, curaddr,
> +                       curaddr = add_bounce_page(dmat, map, kvaddr,
> curaddr,
>                             sgsize);
>                 } else if ((dmat->bounce_flags & BF_COHERENT) == 0) {
>                         if (map->sync_count > 0) {
> @@ -850,19 +850,18 @@ bounce_bus_dmamap_sync(bus_dma_tag_t dmat,
> bus_dmamap_t map,
>                 if ((op & BUS_DMASYNC_PREWRITE) != 0) {
>                         while (bpage != NULL) {
>                                 tempvaddr = NULL;
> -                               datavaddr = (void *)bpage->datavaddr;
> +                               datavaddr = bpage->datavaddr;
>                                 if (datavaddr == NULL) {
>                                         tempvaddr = pmap_quick_enter_page(
>                                             bpage->datapage);
>                                         datavaddr = tempvaddr +
> bpage->dataoffs;
>                                 }
>
> -                               bcopy(datavaddr,
> -                                   (void *)bpage->vaddr,
> bpage->datacount);
> +                               bcopy(datavaddr, bpage->vaddr,
> bpage->datacount);
>                                 if (tempvaddr != NULL)
>                                         pmap_quick_remove_page(tempvaddr);
>                                 if ((dmat->bounce_flags & BF_COHERENT) ==
> 0)
> -                                       cpu_dcache_wb_range(bpage->vaddr,
> +                                       cpu_dcache_wb_range((vm_
> offset_t)bpage->vaddr,
>                                             bpage->datacount);
>                                 bpage = STAILQ_NEXT(bpage, links);
>                         }
> @@ -870,7 +869,7 @@ bounce_bus_dmamap_sync(bus_dma_tag_t dmat,
> bus_dmamap_t map,
>                 } else if ((op & BUS_DMASYNC_PREREAD) != 0) {
>                         while (bpage != NULL) {
>                                 if ((dmat->bounce_flags & BF_COHERENT) ==
> 0)
> -                                       cpu_dcache_wbinv_range(bpage->
> vaddr,
> +                                       cpu_dcache_wbinv_range((vm_
> offset_t)bpage->vaddr,
>                                             bpage->datacount);
>                                 bpage = STAILQ_NEXT(bpage, links);
>                         }
> @@ -879,18 +878,17 @@ bounce_bus_dmamap_sync(bus_dma_tag_t dmat,
> bus_dmamap_t map,
>                 if ((op & BUS_DMASYNC_POSTREAD) != 0) {
>                         while (bpage != NULL) {
>                                 if ((dmat->bounce_flags & BF_COHERENT) ==
> 0)
> -                                       cpu_dcache_inv_range(bpage->vaddr,
> +                                       cpu_dcache_inv_range((vm_
> offset_t)bpage->vaddr,
>                                             bpage->datacount);
>                                 tempvaddr = NULL;
> -                               datavaddr = (void *)bpage->datavaddr;
> +                               datavaddr = bpage->datavaddr;
>                                 if (datavaddr == NULL) {
>                                         tempvaddr = pmap_quick_enter_page(
>                                             bpage->datapage);
>                                         datavaddr = tempvaddr +
> bpage->dataoffs;
>                                 }
>
> -                               bcopy((void *)bpage->vaddr,
> -                                   datavaddr, bpage->datacount);
> +                               bcopy(bpage->vaddr, datavaddr,
> bpage->datacount);
>
>                                 if (tempvaddr != NULL)
>                                         pmap_quick_remove_page(tempvaddr);
> diff --git a/sys/x86/x86/busdma_bounce.c b/sys/x86/x86/busdma_bounce.c
> index bc48c60448da..bd700d4d55be 100644
> --- a/sys/x86/x86/busdma_bounce.c
> +++ b/sys/x86/x86/busdma_bounce.c
> @@ -687,7 +687,7 @@ bounce_bus_dmamap_load_buffer(bus_dma_tag_t dmat,
> bus_dmamap_t map, void *buf,
>  {
>         bus_size_t sgsize;
>         vm_paddr_t curaddr;
> -       vm_offset_t kvaddr, vaddr;
> +       char *kvaddr, *vaddr;
>         int error;
>
>         if (map == NULL)
> @@ -705,17 +705,17 @@ bounce_bus_dmamap_load_buffer(bus_dma_tag_t dmat,
> bus_dmamap_t map, void *buf,
>                 }
>         }
>
> -       vaddr = (vm_offset_t)buf;
> +       vaddr = buf;
>         while (buflen > 0) {
>                 /*
>                  * Get the physical address for this segment.
>                  */
>                 if (pmap == kernel_pmap) {
> -                       curaddr = pmap_kextract(vaddr);
> +                       curaddr = pmap_kextract((vm_offset_t)vaddr);
>                         kvaddr = vaddr;
>                 } else {
> -                       curaddr = pmap_extract(pmap, vaddr);
> -                       kvaddr = 0;
> +                       curaddr = pmap_extract(pmap, (vm_offset_t)vaddr);
> +                       kvaddr = NULL;
>                 }
>
>                 /*
> @@ -879,7 +879,7 @@ bounce_bus_dmamap_sync(bus_dma_tag_t dmat,
> bus_dmamap_t map,
>         if ((op & BUS_DMASYNC_PREWRITE) != 0) {
>                 while (bpage != NULL) {
>                         tempvaddr = NULL;
> -                       datavaddr = (void *)bpage->datavaddr;
> +                       datavaddr = bpage->datavaddr;
>                         datacount1 = bpage->datacount;
>                         if (datavaddr == NULL) {
>                                 tempvaddr =
> @@ -889,8 +889,7 @@ bounce_bus_dmamap_sync(bus_dma_tag_t dmat,
> bus_dmamap_t map,
>                                     datacount1);
>                         }
>
> -                       bcopy(datavaddr,
> -                           (void *)bpage->vaddr, datacount1);
> +                       bcopy(datavaddr, bpage->vaddr, datacount1);
>
>                         if (tempvaddr != NULL)
>                                 pmap_quick_remove_page(tempvaddr);
> @@ -907,8 +906,7 @@ bounce_bus_dmamap_sync(bus_dma_tag_t dmat,
> bus_dmamap_t map,
>                          */
>                         datavaddr = pmap_quick_enter_page(bpage->
> datapage[1]);
>                         datacount2 = bpage->datacount - datacount1;
> -                       bcopy(datavaddr,
> -                           (void *)(bpage->vaddr + datacount1),
> datacount2);
> +                       bcopy(datavaddr, bpage->vaddr + datacount1,
> datacount2);
>                         pmap_quick_remove_page(datavaddr);
>
>  next_w:
> @@ -920,7 +918,7 @@ next_w:
>         if ((op & BUS_DMASYNC_POSTREAD) != 0) {
>                 while (bpage != NULL) {
>                         tempvaddr = NULL;
> -                       datavaddr = (void *)bpage->datavaddr;
> +                       datavaddr = bpage->datavaddr;
>                         datacount1 = bpage->datacount;
>                         if (datavaddr == NULL) {
>                                 tempvaddr =
> @@ -930,8 +928,7 @@ next_w:
>                                     datacount1);
>                         }
>
> -                       bcopy((void *)bpage->vaddr, datavaddr,
> -                           datacount1);
> +                       bcopy(bpage->vaddr, datavaddr, datacount1);
>
>                         if (tempvaddr != NULL)
>                                 pmap_quick_remove_page(tempvaddr);
> @@ -948,8 +945,7 @@ next_w:
>                          */
>                         datavaddr = pmap_quick_enter_page(bpage->
> datapage[1]);
>                         datacount2 = bpage->datacount - datacount1;
> -                       bcopy((void *)(bpage->vaddr + datacount1),
> -                           datavaddr, datacount2);
> +                       bcopy(bpage->vaddr + datacount1, datavaddr,
> datacount2);
>                         pmap_quick_remove_page(datavaddr);
>
>  next_r:
>
>