Run network protocol timer without kernel lock.
authorbluhm <bluhm@openbsd.org>
Mon, 12 Aug 2024 11:25:27 +0000 (11:25 +0000)
committerbluhm <bluhm@openbsd.org>
Mon, 12 Aug 2024 11:25:27 +0000 (11:25 +0000)
commitfc7515015f5f5f1b5deab757287233039b217e26
treee95cc1bce8557f9d6719f0f4b8f7cd87dda06a74
parentd49c07c786cfbc18357be57b78b5771525d1b8bb
Run network protocol timer without kernel lock.

Mark slow and fast protocol timeouts as MP safe.  This means they
run on a spearate thread without holding the kernel lock.
IGMP and MLD6 cannot run in parallel, they use exclusive net lock
to protect themselves.  As a performance optimization global variables
are used to skip igmp_fasttimo() and mld6_fasttimeo() if no multicast
is active.  These global variables use atomic operations and memory
barriers to work lockless.
IPv6 fragment timeout protects itself with a mutex.
TCP timers also run without kernel lock now.  The whole TCP stack
holds exclusive net lock, so additional kernel lock is useless.

OK mvs@
sys/kern/uipc_domain.c
sys/netinet/igmp.c
sys/netinet6/icmp6.c
sys/netinet6/mld6.c