Always allocate per-CPU statistics counters for network interface
authormvs <mvs@openbsd.org>
Fri, 22 Dec 2023 23:01:50 +0000 (23:01 +0000)
committermvs <mvs@openbsd.org>
Fri, 22 Dec 2023 23:01:50 +0000 (23:01 +0000)
commit4046f503025cb2642da1bd56c8be164f62292cdf
treeef231b058159bf2f91d49d8ac152c1fa471c6f14
parentcd67bb408f68a11b9113ec54ec3e91d42979e56a
Always allocate per-CPU statistics counters for network interface
descriptor.

We have the mess in network interface statistics. Only pseudo drivers
do per-CPU counters allocation, all other network devices use the old
`if_data'. The network stack partially uses per-CPU counters and
partially use `if_data', but the protection is inconsistent: some times
counters accessed with exclusive netlock, some times with shared
netlock, some times with kernel lock, but without netlock, some times
with another locks.

To make network interfaces statistics more consistent, always allocate
per-CPU counters at interface attachment time and use it instead of
`if_data'. At this step only move counters allocation to the if_attach()
internals. The `if_data' removal will be performed with the following
diffs to make review and tests easier.

ok bluhm
22 files changed:
sys/net/if.c
sys/net/if_aggr.c
sys/net/if_bpe.c
sys/net/if_etherip.c
sys/net/if_gif.c
sys/net/if_gre.c
sys/net/if_mpe.c
sys/net/if_mpip.c
sys/net/if_mpw.c
sys/net/if_pflow.c
sys/net/if_pfsync.c
sys/net/if_pppx.c
sys/net/if_sec.c
sys/net/if_tpmr.c
sys/net/if_trunk.c
sys/net/if_tun.c
sys/net/if_var.h
sys/net/if_veb.c
sys/net/if_vlan.c
sys/net/if_vxlan.c
sys/net/if_wg.c
sys/netinet/ip_carp.c