Ich arbeite an pcie-basierten Netzwerktreibern. Verschiedene Beispiele verwenden eines von pci_alloc_consistent oder dma_alloc_coherent, um Speicher für Sende- und Empfangsdeskriptoren zu erhalten. Welches ist besser, wenn überhaupt und was ist der Unterschied zwischen den beiden?Unterschied zwischen pci_alloc_consistent und dma_alloc_coherent
Antwort
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 TypGFP_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ätGFP_ATOMIC
Speicher nicht verwenden, es sei denn, Sie benötigen es und in den meisten Fällen werden Sie mitGFP_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()
.
- 1. Unterschied zwischen Vorzeichen & und *?
- 2. VBA: Unterschied zwischen & und +
- 3. Unterschied zwischen "**/* /" und "** /"?
- 4. Unterschied zwischen $ # und $ {# @}
- 5. Unterschied zwischen = und: =
- 6. Unterschied zwischen '#', '%' und '$'
- 7. MySQL: Unterschied zwischen ', `,' und '
- 8. C++ Unterschied zwischen '//' und '///'
- 9. Unterschied zwischen String.Empty und ""
- 10. Unterschied zwischen `% in%` und `==`
- 11. Unterschied zwischen numpy.logical_and und &
- 12. Unterschied zwischen. und #
- 13. Unterschied zwischen // und http: //
- 14. Unterschied zwischen -Wconversion zwischen gcc und g ++
- 15. Unterschied zwischen Wörterbuch und Hashtable
- 16. Unterschied zwischen FetchMode und FetchType
- 17. Unterschied zwischen Application_Start und Application_OnStart
- 18. Unterschied zwischen Uint8Array und Uint8ClampedArray
- 19. Unterschied zwischen BOOST_CHECK_CLOSE und BOOST_CHECK_CLOSE_FRACTION?
- 20. Unterschied zwischen Suche und Index
- 21. Unterschied zwischen AJAX und Senden
- 22. Unterschied zwischen Spekulation und Vorhersage
- 23. Unterschied zwischen inproc und outproc
- 24. Unterschied zwischen Clojure und Clojurescript?
- 25. Unterschied zwischen NSArray und NSMutableArray
- 26. Unterschied zwischen libcurl und libsoup
- 27. Unterschied zwischen DirectoryCatalog und AssemblyCatalog
- 28. Unterschied zwischen * y ++ und ++ * y?
- 29. Unterschied zwischen SwingWorker und SwingUtilities.invokeLater
- 30. Unterschied zwischen String.scan und String.split