bus_dmamap_sync() for bounced client buffers from user address space

Adrian Chadd adrian at freebsd.org
Tue Apr 28 19:10:44 UTC 2015


On 28 April 2015 at 09:19, Warner Losh <imp at bsdimp.com> wrote:
>
>> On Apr 28, 2015, at 7:40 AM, John Baldwin <jhb at FreeBSD.org> wrote:
>>
>>> I believe UIO_USERSPACE is almost unused, it might be there for some
>>> obscure (and buggy) driver.
>>
>> I believe it was added (and only ever used) in crypto drivers, and that they
>> all did bus_dma operations in the context of the thread that passed in the
>> uio.  I definitely think it is fragile and should be replaced with something
>> more reliable.
>
> Fusion I/O’s SDK used this trick to allow mapping of userspace buffers down
> into the block layer after doing the requisite locking / pinning / etc of the buffers
> into memory. That’s if memory serves correctly (the SDK did these things, I can’t
> easily check on that detail since I’m no longer at FIO).

This is a long-standing trick. physio() does it too,
aio_read/aio_write does it for direct block accesses. Now that pbufs
aren't involved anymore, it should scale rather well.

So I'd like to see more of it in the kernel and disk/net APIs and drivers.


-adrian


More information about the freebsd-arch mailing list