Page MenuHomeFreeBSD

linuxkpi: Fix DMA_BIDIRECTIONAL mapping
Needs ReviewPublic

Authored by zishun.yi.dev_gmail.com on Wed, Feb 25, 5:28 AM.
Tags
None
Referenced Files
Unknown Object (File)
Fri, Mar 20, 12:53 AM
Unknown Object (File)
Wed, Mar 18, 3:18 AM
Unknown Object (File)
Tue, Mar 17, 11:59 PM
Unknown Object (File)
Tue, Mar 17, 1:36 PM
Unknown Object (File)
Mon, Mar 16, 4:32 PM
Unknown Object (File)
Tue, Mar 3, 10:47 PM
Unknown Object (File)
Tue, Mar 3, 9:46 PM
Unknown Object (File)
Sun, Mar 1, 11:32 PM
Subscribers

Details

Reviewers
None
Group Reviewers
linuxkpi
Summary

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
Reported by: Zishun Yi <zishun.yi.dev@gmail.com>
Fixes: 95edb10b47fc ("LinuxKPI: implement dma_sync_single_for_*, apply to (un)map single/sg")
Signed-off-by: Zishun Yi <zishun.yi.dev@gmail.com>

Diff Detail

Repository
rG FreeBSD src repository
Lint
Lint Skipped
Unit
Tests Skipped
Build Status
Buildable 70977
Build 67860: arc lint + arc unit