CVSROOT:        /cvs
Module name:    src
Changes by:     j...@cvs.openbsd.org    2025/04/16 11:17:06

Modified files:
        sys/dev/pci    : if_ixl.c 
        sys/netinet    : tcp_input.c tcp_var.h 

Log message:
Add a software implementation of TCP Large Receive Offload.

This diff adds a SoftLRO implementation in tcp_input.c as its counter
part tcp_chopper() (which is a SoftTSO implementation) in tcp_output.c.

We just use SoftLRO in ixl(4) for now, but default off. Because of some
unclear bugs in ixl(4) and our network stack.  The mbuf chain length
produced by SoftLRO is limited to a maximum of 8.  This avoids
m_defrag() calls in which leads to races in ixl(4) tx/rx interrupts and
mbuf handling.

We also use the packet type field in the receive descriptors to
differentiate between TCP and other Packets.  So, we have two
mbuf lists and non-TCP traffic it not influenced by SoftLRO.
This it not necessary for all drivers, but helps to avoid a
decrease of UDP bulk traffic.

Thanks to all the testers: Mark Patruck, Yuichiro NAITO, Hrvoje Popovski
jj@, lucas@ and bluhm@.

With tweaks from dlg@ and bluhm@.

ok bluhm@

Reply via email to