2014-12-28 4 views

Antwort

10

Der Unterschied ist subtil, aber ziemlich wichtig. pci_alloc_consistent() ist die ältere Funktion der beiden und Legacy-Treiber verwenden es immer noch. Nowaways, pci_alloc_consistent() ruft nur dma_alloc_coherent().

Der Unterschied? Der Typ des zugewiesenen Speichers.

  • pci_alloc_consistent() - Ordnet Speicher vom Typ GFP_ATOMIC. Zuteilung nicht schlafen, zur Verwendung in z.B. Interrupt-Handler, unten Hälften.

  • dma_alloc_coherent() - Sie legen fest, welche Art von Speicher zu zuweisen. Sie sollten die hohe Priorität GFP_ATOMIC Speicher nicht verwenden, es sei denn, Sie benötigen es und in den meisten Fällen werden Sie mit GFP_KERNEL Allokationen in Ordnung sein.

Kernel 3.18 Definition von pci_alloc_consistent() ist sehr einfach, nämlich:

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

Kurz gesagt, verwenden dma_alloc_coherent().