Sto lavorando su driver di rete PCIe basata. Diversi esempi utilizzano uno dei pci_alloc_consistent o dma_alloc_coherent ottenere memoria per trasmissione e ricezione descrittori. Quale è meglio se c'è e qual è la differenza tra i due?differenza tra pci_alloc_consistent e dma_alloc_coherent
risposta
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 tipoGFP_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 conGFP_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()
.