Linux内核:可以无限期地打开流式DMA映射吗?

jer*_*ble 5 c linux-device-driver dma

关于设备驱动程序编程的许多指南建议流式DMA映射(即由dma_map_single()朋友创建的那些)在尽可能短的时间内保持打开状态,因为它们消耗资源(即,如果平台有一个或者弹跳缓冲区,则为IOMMU映射资源)在需要的时候).

在我的情况下,我正在使用一个支持64位DMA的PCIe设备,因此不需要反弹缓冲区(在这种情况下看起来似乎不需要IOMMU的特殊处理,对吗?).数据来自设备(即它被映射DMA_TO_CPU),当新数据通过中断可用时,设备通知我,此时我dma_sync_for_cpu()在访问刚刚DMA给我的数据之前触发a .

是否有其他原因我不应该无限期地打开映射(当然,直到数据消费者关闭)?

jer*_*ble 1

我在 Linux 内核源代码中发现了至少一个实例,其中流式 DMA 映射可能会在不确定的时间内保持打开状态:

在用于处理同步 DMA () 的火线驱动程序代码中drivers/firewire/core-iso.c,当用户空间调用 时会建立 DMA 映射mmap(),并且只要用户空间保持设备打开,该映射就会保持打开状态。