bdu*_*bey 9 network-programming driver linux-device-driver dma pci-e
我正在研究基于pcie的网络驱动程序.不同的示例使用pci_alloc_consistent或dma_alloc_coherent之一来获取传输和接收描述符的内存.哪一个更好,如果有的话两者有什么区别?
Mil*_*lan 14
差异很微妙但非常重要.
pci_alloc_consistent()
是旧的功能两个和传统的驱动程序仍然使用它.现在,pci_alloc_consistent()
只是打电话dma_alloc_coherent()
.
区别?已分配内存的类型.
pci_alloc_consistent()
- 分配类型的内存GFP_ATOMIC
.分配不会休眠,用于例如中断处理程序,下半部分.
dma_alloc_coherent()
- 您自己指定要分配的内存类型.GFP_ATOMIC
除非您需要,否则不应使用高优先级内存,在大多数情况下,您可以使用
GFP_KERNEL
分配.
内核3.18的定义pci_alloc_consistent()
很简单,即:
static inline void *
pci_alloc_consistent(struct pci_dev *hwdev, size_t size,
dma_addr_t *dma_handle)
{
return dma_alloc_coherent(hwdev == NULL ? NULL : &hwdev->dev, size, dma_handle, GFP_ATOMIC);
}
Run Code Online (Sandbox Code Playgroud)
简而言之,使用dma_alloc_coherent()
.
归档时间: |
|
查看次数: |
4879 次 |
最近记录: |