Hi, This is another proposal that unifies bpf_mtap and if_ipackets++, which are executed in each driver now, into the percpuq if_input framework.
The benefits of the change are: - We can reduce codes - We can provide the same behavior between drivers - How if_ipackets is counted up - Well, actually some drivers periodically update packet statistics though - We can run bpf_mtap in softint - This makes it easy to MP-ify bpf Here is a patch: http://www.netbsd.org/~ozaki-r/unify-bpf_mtap-if_ipackets.diff The patch is almost mechanically generated by spatch. Let me know if there are mistakes. We can move most bpf_mtap into softint by the patch but there remain some bpf_mtap that can run in hardware interrupt context. Two of them that are executed from Tx interrupt and can be moved if_start which is the usual place for bpf_mtap on Tx. Here is a patch for the change: http://www.netbsd.org/~ozaki-r/move-bpf_mtap-txintr.diff Is this kind of changes correct? So there are five remaining bpf_mtap that cannot be solved without big changes. I annotate them: http://www.netbsd.org/~ozaki-r/comment-bpf_mtap-hardintr.diff One solution is to provide a deferred bpf_mtap mechanism that duplicates mbuf and run bpf_mtap in softint (or workqueue). It should work but it's perhaps a last resort. Let me know if there is a better approach. Any comments or suggestions? Thanks, ozaki-r