2015-01-09 58 views
2

當我們同時使用DMA和高速緩存時會發生什麼?在使用DMA和緩存時需要注意什麼是程序員的注意事項?同時使用DMA和高速緩存

+0

使用函數像',其中記錄dma_alloc_coherent()'[DMA-API-HOWTO.txt] (https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/Documentation/DMA-API-HOWTO.txt)。請注意,大多數情況下,您可以將要用於DMA的內存分配爲不可緩存。其他內存(程序數據)可以被緩存。你可能只緩存一部分內存;它不是全部或沒有。 –

回答

1

DMA將讀取和寫入內存,而不是緩存。例如,DMA控制器可以更新當前緩存的某些內存,並且更改不會反映在數據緩存中。或者您可能已經修改了與DMA訪問的區域相對應的緩存數據。
您必須告訴緩存控制器。這是非常依賴於體系結構
例如,這使用於ARM架構的CP15協處理器的寄存器控制(見http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.ddi0464f/CIHDGCBH.html

+0

x86高速緩存是DMA一致的,這使得在開發驅動程序時很容易忽略錯誤。 –