Rework locking in BPF code to remove rwlock from fast path.
On high packets rate the contention on rwlock in bpf_*tap*() functions
can lead to packets dropping. To avoid this, migrate this code to use
epoch(9) KPI and ConcurrencyKit's lists.
- all lists changed to use CK_LIST;
- reference counting added to bpf_if and bpf_d;
- now bpf_if references ifnet and releases this reference on destroy;
- each bpf_d descriptor references bpf_if when it is attached;
- new struct bpf_program_buffer introduced to keep BPF filter programs;
- bpf_program_buffer, bpf_d and bpf_if structures are freed by epoch_call();
- bpf_freelist and ifnet_departure event are no longer needed, thus both are removed;
Reviewed by: melifaro
Sponsored by: Yandex LLC
Differential Revision: https://reviews.freebsd.org/D20224