gpt4 book ai didi

linux - 是否每个 dma_map_single 调用都需要相应的 dma_unmap_single?

转载 作者:太空狗 更新时间:2023-10-29 11:05:00 28 4
gpt4 key购买 nike

我正在将大型代码库移植到 Linux 内核设备驱动程序。 ASIC 使用大量的 DMA channel 。

我使用 GFP_KERNEL|GFP_DMA 分配内存。在启动 DMA 之前,我使用 dma_map_single 获取硬件(物理)内存地址以提供给硬件。 (还有刷新/使 dcache 中的内存无效吗?)一旦 DMA 完成,我有时需要 CPU 访问数据,但不经常。在通过代码访问数据之前,我执行 dma_unmap_single 以避免缓存一致性问题。

在我不需要 CPU 访问的情况下,我还需要调用 dma_unmap_single 吗?我应该 dma_unmap_single dma_map_single 中的每个指针吗? dma_map_single 是否消耗了 dma_unmap_single 将释放的资源(例如,表条目)?

DMA-API.txt 并不清楚良好的 DMA 内存卫生。

谢谢!

最佳答案

使用 dma_map_single,您可以为 DMA 传输映射内存。您获得指向内存的物理指针,因此设备可以通过 DMA 访问该地址。

使用dma_unmap_single 取消映射上面映射的内存。您应该在传输结束后执行此操作。

您可以映射一个内存区域,并将其用于多个 DMA 传输,然后在工作完成后取消映射。每次要访问 DMA 内存时,都必须同步它。如果设备要访问内存,你应该做dma_sync_single_for_device;如果主机要访问内存,您应该执行 dma_sync_single_for_cpu

关于linux - 是否每个 dma_map_single 调用都需要相应的 dma_unmap_single?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16172118/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com