freebsd-skq/sys
John Baldwin 07159830be Add support for zero-copy aio_write() on TOE sockets.
AIO write requests for a TOE socket on a Chelsio T4+ adapter can now
DMA directly from the user-supplied buffer.  This is implemented by
wiring the pages backing the user-supplied buffer and queueing special
mbufs backed by raw VM pages to the socket buffer.  The TOE code
recognizes these special mbufs and builds a sglist from the VM page
array associated with the mbuf when queueing a work request to the TOE.

Because these mbufs do not have an associated virtual address, m_data
is not valid.  Thus, the AIO handler does not invoke sosend() directly
for these mbufs but instead inlines portions of sosend_generic() and
tcp_usr_send().

An aiotx_buffer structure is used to describe the user buffer (e.g.
it holds the array of VM pages and a reference to the AIO job).  The
special mbufs reference this structure via m_ext.  Note that a single
job might be split across multiple mbufs (e.g. if it is larger than
the socket buffer size).  The 'ext_arg2' member of each mbuf gives an
offset relative to the backing aiotx_buffer.  The AIO job associated
with an aiotx_buffer structure is completed when the last reference to
the structure is released.

Zero-copy aio_write()'s for connections associated with a given
adapter can be enabled/disabled at runtime via the
'dev.t[45]nex.N.toe.tx_zcopy' sysctl.

MFC after:	1 month
Relnotes:	yes
Sponsored by:	Chelsio Communications
2016-07-27 18:29:35 +00:00
..
amd64 Add more UEFI/e820 memory types from latest specifications. 2016-07-24 09:15:11 +00:00
arm Add more UEFI/e820 memory types from latest specifications. 2016-07-24 09:15:11 +00:00
arm64 Remove an unused variable. 2016-07-25 16:18:20 +00:00
boot
bsm
cam Remove some extraneous printfs. 2016-07-25 19:16:30 +00:00
cddl
compat Hide the boottime and bootimebin globals, provide the getboottime(9) 2016-07-27 11:08:59 +00:00
conf hyperv/vmbus: Rename cleaned up bufring code 2016-07-27 09:27:08 +00:00
contrib Update iwmfw(4) to include support for 8260 series units and update 2016-07-25 23:05:25 +00:00
crypto
ddb
dev Add support for zero-copy aio_write() on TOE sockets. 2016-07-27 18:29:35 +00:00
fs Hide the boottime and bootimebin globals, provide the getboottime(9) 2016-07-27 11:08:59 +00:00
gdb
geom Do not invoke resize method if geom is being withered. 2016-07-25 09:12:08 +00:00
gnu
i386 Add more UEFI/e820 memory types from latest specifications. 2016-07-24 09:15:11 +00:00
isa
kern ANSIfy kern_proc.c and delete register keyword 2016-07-27 14:27:08 +00:00
kgssapi
libkern
mips
modules hyperv/vmbus: Rename cleaned up bufring code 2016-07-27 09:27:08 +00:00
net Hide the boottime and bootimebin globals, provide the getboottime(9) 2016-07-27 11:08:59 +00:00
net80211
netgraph
netinet Fix the case for some sysctl descriptions. 2016-07-26 20:20:09 +00:00
netinet6 Fix per-connection L2 caching in fast path 2016-07-22 02:11:49 +00:00
netipsec
netnatm
netpfil Hide the boottime and bootimebin globals, provide the getboottime(9) 2016-07-27 11:08:59 +00:00
netsmb
nfs Hide the boottime and bootimebin globals, provide the getboottime(9) 2016-07-27 11:08:59 +00:00
nfsclient
nfsserver
nlm
ofed
opencrypto
pc98
powerpc Use label math instead of hard-coding offsets for return addresses. 2016-07-23 02:27:42 +00:00
riscv
rpc Hide the boottime and bootimebin globals, provide the getboottime(9) 2016-07-27 11:08:59 +00:00
security
sparc64
sys Hide the boottime and bootimebin globals, provide the getboottime(9) 2016-07-27 11:08:59 +00:00
teken
tests
tools
ufs Ensure that the UFS directory vnode' vm_object is properly sized 2016-07-20 14:40:56 +00:00
vm De-pluralize "queues" where appropriate in the pagedaemon code. 2016-07-27 17:11:03 +00:00
x86
xdr
xen
Makefile