Unlock udp(4) somove().
authormvs <mvs@openbsd.org>
Sat, 20 Jul 2024 17:26:19 +0000 (17:26 +0000)
committermvs <mvs@openbsd.org>
Sat, 20 Jul 2024 17:26:19 +0000 (17:26 +0000)
commit134de7a21601cb6a13fc822772be13446aae0e97
treea5f3c43cf4190f20caacce20f4e0b0d2a4f9920a
parent2183e7c29e1c1458340592b994a2621234723502
Unlock udp(4) somove().

Socket splicing belongs to sockets buffers. udp(4) sockets are fully
switched to fine-grained buffers locks, so use them instead of exclusive
solock().

Always schedule somove() thread to run as we do for tcp(4) case. This
brings delay to packet processing, but it is comparable wit non splicing
case where soreceive() threads are always scheduled.

So, now spliced udp(4) sockets rely on sb_lock() of `so_rcv' buffer
together with `sb_mtx' mutexes of both buffers. Shared solock() only
required around pru_send() call, so the most of somove() thread runs
simultaneously with network stack.

Also document 'sosplice' structure locking.

Feedback, tests and OK from bluhm.
sys/kern/uipc_socket.c
sys/netinet/udp_usrreq.c
sys/sys/socketvar.h