2014-12-28 14 views

risposta

10

La differenza è sottile, ma molto importante. pci_alloc_consistent() è la funzione meno recente dei due e dei driver precedenti ancora utilizzata. giorno d'oggi i pci_alloc_consistent() solo chiamate dma_alloc_coherent().

La differenza? Il tipo di memoria allocata.

  • pci_alloc_consistent() - Alloca memoria di tipo GFP_ATOMIC. L'allocazione non dorme, per l'uso ad es. interrompe i gestori, in basso metà.

  • dma_alloc_coherent() - Specificate voi quale tipo di memoria assegnare a . Non si deve usare l'alta priorità GFP_ATOMIC memoria a meno che non ne hai bisogno e nella maggior parte dei casi, vi troverete bene con GFP_KERNEL allocazioni.

Kernel 3.18 definizione di pci_alloc_consistent() è molto semplice, e cioè:

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); 
} 

In breve, utilizzare dma_alloc_coherent().