07159830be
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 |
||
---|---|---|
.. | ||
common | ||
cxgbei | ||
firmware | ||
iw_cxgbe | ||
tom | ||
adapter.h | ||
if_cxl.c | ||
offload.h | ||
osdep.h | ||
t4_if.m | ||
t4_ioctl.h | ||
t4_iov.c | ||
t4_l2t.c | ||
t4_l2t.h | ||
t4_main.c | ||
t4_mp_ring.c | ||
t4_mp_ring.h | ||
t4_netmap.c | ||
t4_sge.c | ||
t4_tracer.c |