簡體   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