On Tue, Jan 04, 2011 at 02:32:02AM -0800, Matt Thomas wrote: > Not really. A lot of device can only do 32bit DMA transfers so without some > type assistance (like the alpha has) you are restricted to DMA to the first > 4GB of RAM. If you are doing DMA to an address >= 4GB, the system will stage > the data in a buffer < 4GB for the DMA and then move the data to its ultimate > destination (for a read). For a write it copies to the "bounce" buffer, and > then does a DMA. > > The point is if you are allocating a mbuf or a usb buffer, it makes sense to > allocate from the first 4GB if you can to avoid using bounce buffers. > > It's just a preference.
Is there some provision to always keep some <4GB pages free (with some being quite large for e.g. USB descriptors) so there is always some bounce buffers available ? AFAIK, if you allocate from the <4Gb free list, you can eat all DMA-capable RAM. I fixed this issue in arch/x86/x86/x86_machdep.c 1.37, I wonder if your change has reintroduced this problem ... -- Manuel Bouyer <bou...@antioche.eu.org> NetBSD: 26 ans d'experience feront toujours la difference --