bus_dmamap_sync() for bounced client buffers from user address space

Konstantin Belousov kostikbel at gmail.com
Sat Apr 25 17:28:40 UTC 2015


On Sat, Apr 25, 2015 at 12:07:29PM -0500, Jason Harmening wrote:
> 
> On 04/25/15 11:34, Konstantin Belousov wrote:
> > I believe UIO_USERSPACE is almost unused, it might be there for some
> > obscure (and buggy) driver.
> It may be nearly unused, but we still document it in busdma.9, and we
> still explicitly check for it when setting the pmap in
> _bus_dmamap_load_uio.  If it's not safe to use, then it's not OK for us
> to do that.
> We need to either a) remove support for it by adding a failure/KASSERT
> on UIO_USERSPACE in _busdmamap_load_uio() and remove the paragraph on it
> from busdma.9, or b) make it safe.
> 
> I'd be in favor of b), because I think it is still valid to support some
> non-painful way of using DMA with userspace buffers.  Right now, the
> only safe way to do that seems to be:
> 1) vm_fault_quick_hold_pages
> 2) kva_alloc
> 3) pmap_qenter
> 4) bus_dmamap_load
1. vm_fault_quick_hold
2. bus_dmamap_load_ma

> 
> That seems both unnecessarily complex and wasteful of KVA space.
> 
The above sequence does not need a KVA allocation.




More information about the freebsd-arch mailing list