首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >确保DMA -capable内存

确保DMA -capable内存
EN

Stack Overflow用户
提问于 2015-08-11 18:58:42
回答 1查看 1.6K关注 0票数 2

我正在阅读以下文档的“Part Id”部分,我不确定这个文档与内核2.6.35有多大的相关性;具体来说,它是这样写的:

代码语言:javascript
复制
..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谈到了关于传统ISA设备的__GFP_DMA标志,因此我不确定这是否适用于PCI/PCIe设备。

如果重要的话,这就是x86 64位平台:

代码语言:javascript
复制
pci_set_dma_mask(dev, 0xffffffffffffffffULL);
pci_set_consistent_dma_mask(dev, 0xffffffffffffffffULL);

我很想听听关于它的一些解释。

EN

回答 1

Stack Overflow用户

发布于 2015-08-12 08:13:00

  1. 用于DMA的GFP_* 在x86上:
代码语言:javascript
复制
- ISA - when using `kmalloc()` need to bitwise-or `GFP_DMA` with `GFP_KERNEL` (or `_ATOMIC`) because of the following:

GFP_DMA保证:

(1)当get_free_page返回多个页面时,物理地址是连续的

(2)只返回低于MAX_DMA_ADDRESS的地址。由于ISA的限制,MAX_DMA_ADDRESS在PC上是16 of。

- PCI -不需要使用GFP_DMA,因为没有MAX_DMA_ADDRESS限制

  1. dma_mask在调用dma_map_*dma_alloc_coherent时由设备进行检查。 dma_alloc_coherent确保所分配的内存能够被dma_map_*使用,这也给其他方面带来了好处。(实现可以选择忽略影响返回内存位置的标志,如GFP_DMA)

您可以参考howto.1.txt

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31949861

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档