【发布时间】:2015-08-11 18:58:42
【问题描述】:
我正在阅读以下document 的“部分 ID”部分,例如,我不确定该文档与内核 2.6.35 的相关性如何;特别是它说:
..the DMA address of the memory must be within the dma_mask of the device..
他们建议将某些标志(例如 GFP_DMA)传递给 kmalloc,以确保内存将落在提供的 DMA 掩码内。
但是,如果内存是从kmem_cache_create 创建的缓存池中分配的,并且使用kmem_cache_alloc(.. GFP_ATOMIC),这不符合 DMA-API.txt 中列出的要求?
另一方面,LDD 谈到 __GFP_DMA 标志与旧 ISA 设备有关,因此我不确定这是否适用于 PCI/PCIe 设备。
如果重要的话,这是 x86 64 位平台:
pci_set_dma_mask(dev, 0xffffffffffffffffULL);
pci_set_consistent_dma_mask(dev, 0xffffffffffffffffULL);
我希望能听到一些关于它的解释。
【问题讨论】:
标签: linux-kernel x86 linux-device-driver dma