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

时间:2014-01-07 18:30:36

标签: c linux-device-driver dma

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

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

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

1 个答案:

答案 0 :(得分:1)

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

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