2014-12-28 5 views
6

pcie 기반 네트워크 드라이버에서 작업 중입니다. 다른 예는 pci_alloc_consistent 또는 dma_alloc_coherent 중 하나를 사용하여 송수신 설명자를위한 메모리를 얻습니다. 어떤 것이 있다면 더 좋고 그 둘의 차이점은 무엇입니까?pci_alloc_consistent와 dma_alloc_coherent의 차이점

답변

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()를 사용합니다.