On Wednesday 06 June 2007, Oliver Neukum wrote: > Am Mittwoch, 6. Juni 2007 schrieb Pete Zaitcev: > > The consistent allocation was intended to things like mailboxes, > > where it is more advantageous to load a couple of words from uncached > > memory than to call an API which invalidates or flushes the caches. > > In case of USB, QHs and TDs are a good example, which is why the > > pool allocation is layered on top of consistent allocations.
Well, "things like mailboxes" is over-specialized. The key issue is not needing to use buffer synch operations. There are lots of places where having a second level of hardware races to fight with would be just ... dumb. > > It we all were using SPARC or MIPS, we'd learn this pretty quickly. > > However, on x86 and s390, which are I/O coherent, there is really > > not much difference. The consistent mapping is cached. > > > > So this decision is comes down pretty much to giving a damn about > > ARM or SPARC. Or MIPS/SPIM, many PowerPC systems, SH, AVR32 ... that answer is easy!! Most architectures running Linux, other than x86, don't bother spending silicon to make their CPU caches snoop bus traffic. > > There is also a question of tying up IOMMU resources for a long time. > > If you set up DMA mappings in advance with usb_buffer_alloc, you keep > > a part of your IOMMU unavailable to things like mass storage, which As I understand it the actual mechanism is more like: platforms always set up a chunk of memory as uncached, and always map that through the IOMMU. Call that the DMA-{coherent,consistent} region. Utilities like dma_alloc_coherent() -- and hence usb_buffer_alloc(), dma_pool_*(), and so on -- return memory from that region. So the resources are *always* tied up; fixed overhead. What's visible to drivers is that per-transfer buffer operations are not needed. > Yet the documentation claims that the IOMMU is not affected? Quote: > > The memory buffer returned is "dma-coherent"; sometimes you might need to > force a consistent memory access ordering by using memory barriers. It's > not using a streaming DMA mapping, so it's good for small transfers on > systems where the I/O would otherwise tie up an IOMMU mapping. (See That's not worded as well as it might be. The issue is tying up a private mapping, and needing to map/unmap for each keystroke (using the example of a USB HID keyboard). > Documentation/DMA-mapping.txt for definitions of "coherent" and "streaming" > DMA mappings.) I've got a patch in the works to update docs, since nobody else seems to have stepped up to the bar on that issue ... - Dave ------------------------------------------------------------------------- This SF.net email is sponsored by DB2 Express Download DB2 Express C - the FREE version of DB2 express and take control of your XML. No limits. Just data. Click to get it now. http://sourceforge.net/powerbar/db2/ _______________________________________________ linux-usb-devel@lists.sourceforge.net To unsubscribe, use the last form field at: https://lists.sourceforge.net/lists/listinfo/linux-usb-devel