2014-12-28 3 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 ассигнований.

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().

 Смежные вопросы

  • Нет связанных вопросов^_^