pcie 기반 네트워크 드라이버에서 작업 중입니다. 다른 예는 pci_alloc_consistent 또는 dma_alloc_coherent 중 하나를 사용하여 송수신 설명자를위한 메모리를 얻습니다. 어떤 것이 있다면 더 좋고 그 둘의 차이점은 무엇입니까?pci_alloc_consistent와 dma_alloc_coherent의 차이점
6
A
답변
10
차이점은 미묘하지만 중요합니다. pci_alloc_consistent()
은이 두 기능의 이전 기능이며 레거시 드라이버는 여전히이 기능을 사용합니다. 요즘, pci_alloc_consistent()
은 dma_alloc_coherent()
으로 전화합니다.
차이점은 무엇입니까? 할당 된 메모리의 유형.
pci_alloc_consistent()
- 유형GFP_ATOMIC
의 메모리를 할당합니다. 예를 들어, 인터럽트 핸들러, 하단 반쪽.dma_alloc_coherent()
- 에 할당 할 메모리 유형을 직접 지정하십시오. 필요할 때 높은 우선 순위GFP_ATOMIC
메모리 을 사용하지 않아야하며 대부분의 경우GFP_KERNEL
할당으로 문제가되지 않습니다.pci_alloc_consistent()
의
커널 3.18의 정의, 즉, 매우 간단합니다 : 한마디로
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()
를 사용합니다.