作者:diuhunpo_813 | 来源:互联网 | 2023-05-29 12:15
我正在研究基于pcie的网络驱动程序.不同的示例使用pci_alloc_consistent或dma_alloc_coherent之一来获取传输和接收描述符的内存.哪一个更好,如果有的话两者有什么区别?
1> Milan..:
差异很微妙但非常重要.
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);
}
简而言之,使用dma_alloc_coherent()
.