繁体   English   中英

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

[英]Linux Kernel: Is it OK to leave a streaming DMA mapping open indefinitely?

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM