![](/img/trans.png)
[英]How do I use dma_alloc_attr() with DMA_ATTR_NO_KERNEL_MAPPING?
[英]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.