[Bug 297155] LinuxKPI: swapped busdma sync operations in the DMA_TO_DEVICE / DMA_FROM_DEVICE PRE-sync path break streaming DMA when a mapping bounces (breaks ath10k QCA6174 on >4GB machines)

From: <bugzilla-noreply_at_freebsd.org>
Date: Fri, 04 Sep 2026 22:54:38 UTC
https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=297155

--- Comment #2 from commit-hook@FreeBSD.org ---
A commit in branch main references this bug:

URL:
https://cgit.FreeBSD.org/src/commit/?id=6e1436d748273be52fb155914db3efae075a8619

commit 6e1436d748273be52fb155914db3efae075a8619
Author:     Zishun Yi <zishun.yi.dev@gmail.com>
AuthorDate: 2026-09-04 19:11:35 +0000
Commit:     Bjoern A. Zeeb <bz@FreeBSD.org>
CommitDate: 2026-09-04 22:52:24 +0000

    LinuxKPI: Fix DMA_BIDIRECTIONAL and other mappings

    In dma_sync_single_for_cpu(), the DMA_BIDIRECTIONAL direction currently
    performs BUS_DMASYNC_POSTREAD followed by BUS_DMASYNC_PREREAD. This
    patch corrects the mapping to use BUS_DMASYNC_POSTREAD |
    BUS_DMASYNC_POSTWRITE.

    When ownership of the DMA area is transferred to the CPU, we must assume
    the previous device access was bidirectional. Both POST operations are
    necessary to ensure the CPU sees a consistent view of memory after
    potential device reads and writes. A PREREAD is unnecessary here because
    the device will no longer access the memory since ownership has been
    transferred to the CPU.

    Conversely, for dma_sync_single_for_device(), ownership is being
    transferred back to the hardware. The buffer must be prepared for
    potential bidirectional access by the device, requiring
    BUS_DMASYNC_PREREAD | BUS_DMASYNC_PREWRITE.

    PR:             293381, 297155
    Reported by:    Zishun Yi <zishun.yi.dev@gmail.com>
    Reported by:    Kim Shrier (fbsdbugs westryn.net)
    Fixes:          95edb10b47fc ("LinuxKPI: implement dma_sync_single_for_*,
apply to (un)map single/sg")
    Signed-off-by:  Zishun Yi <zishun.yi.dev@gmail.com>
    Reviewed by:    aokblast, bz
    Differential Revision: https://reviews.freebsd.org/D55497

 sys/compat/linuxkpi/common/include/linux/dma-mapping.h | 10 ++++------
 sys/compat/linuxkpi/common/src/linux_pci.c             | 15 ++++++++-------
 2 files changed, 12 insertions(+), 13 deletions(-)

-- 
You are receiving this mail because:
You are on the CC list for the bug.