[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)
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
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.