Page MenuHomeFreeBSD

LinuxKPI: implement dma_set_coherent_mask()
ClosedPublic

Authored by bz on Sep 27 2021, 10:59 PM.
Tags
None
Referenced Files
Unknown Object (File)
Thu, Oct 24, 10:53 PM
Unknown Object (File)
Thu, Oct 24, 10:53 PM
Unknown Object (File)
Thu, Oct 24, 10:53 PM
Unknown Object (File)
Thu, Oct 24, 10:36 PM
Unknown Object (File)
Sat, Oct 12, 11:14 PM
Unknown Object (File)
Oct 1 2024, 4:19 PM
Unknown Object (File)
Sep 21 2024, 3:59 AM
Unknown Object (File)
Sep 20 2024, 4:47 PM

Details

Summary

Coherent is lower 32bit only by default in Linux and our only default
dma mask is 64bit currently which violates expectations unless
dma_set_coherent_mask() was called explicitly with a different mask.

Implement coherent by creating a second tag, and storing the tag in the
objects and use the tag from the object wherever possible.
This currently does not update the scatterlist or pool (both could be
converted but S/G cannot be MFCed as easily).

There is a 2nd change embedded in the updated logic of
linux_dma_alloc_coherent() to always zero the allocation as
otherwise some drivers get cranky on uninialised garbage.

Sponsored by: The FreeBSD Foundation
MFC after: 7 days

Diff Detail

Repository
rG FreeBSD src repository
Lint
Lint Not Applicable
Unit
Tests Not Applicable