$NetBSD: TODO.smpnet,v 1.2 2017/02/10 03:59:02 ozaki-r Exp $ MP-safe components ================== - bridge(4) - bpf(4) - gif(4) - npf(7) - pfil(9) - pppoe(4) - if_spppsubr.c - tun(4) - vioif(4) - vmx(4) - wm(4) - Layer 2 (only Ethernet) - if_ethersubr.c - Most Layer 3 Non MP-safe components and kernel options ========================================= - agr(4) - altq(4) - carp(4) - etherip(4) - faith(4) - gre(4) - ieee80211(4) - ipf(4) - ipsec(4) - kttcp(4) - mpls(4) - opencrypto(9) - pf(4) - ppp(4) - sl(4) - stf(4) - strip(4) - if_srt - tap(4) - vlan(4) - netsmb - netnatm - netisbn - netatalk - netbt - netkey - if_arcsubr.c - if_atmsubr.c - if_ecosubr.c - if_fddisubr.c - if_hippisubr.c - if_ieee1394subr.c - if_tokensubr.c - DCCP - IGMP - IPSELSRC - MROUTING - NFS - PIM - SCTP - TCP - UDP - Layer 4 - IP multicast - Most network device drivers Know issues =========== bpf --- MP-ification of bpf requires all of bpf_mtap* are called in normal LWP context or softint context, i.e., not in hardware interrupt context. For Tx, all bpf_mtap satisfy the requrement. For Rx, most of bpf_mtap are called in softint. Unfortunately some bpf_mtap on Rx are still called in hardware interrupt context. This is the list of the functions that have such bpf_mtap: - sca_frame_process() @ sys/dev/ic/hd64570.c - en_intr() @ sys/dev/ic/midway.c - rxintr_cleanup() and txintr_cleanup() @ sys/dev/pci/if_lmc.c - ipr_rx_data_rdy() @ sys/netisdn/i4b_ipr.c Ideally we should make the functions run in softint somehow, but we don't have actual devices, no time (or interest/love) to work on the task, so instead we provide a deferred bpf_mtap mechanism that forcibly runs bpf_mtap in softint context. It's a workaround and once the functions run in softint, we should use the original bpf_mtap again.