j...@helkyn.org ("Jean-Yves Migeon (NetBSD)") writes: >[373.4828972] bridge_input() at netbsd:bridge_input+0x9f1
That's acquiring the global locks (kernel + softnet) in vlan(4): if (_ifp != NULL) { m->m_flags &= ~M_PROMISC; ACQUIRE_GLOBAL_LOCKS(); ether_input(_ifp, m); RELEASE_GLOBAL_LOCKS(); >[373.4928971] vlan_input() at netbsd:vlan_input+0x143 >[373.5828969] ether_input() at netbsd:ether_input+0x4c2 >[373.5828969] bridge_input() at netbsd:bridge_input+0xa10 That's the same location calling into ether_input (after having acquired the locks). The locking loop happens, because vlan(4) injects the (vlan-header stripped) packet back into the interface where it again is intercepted by bridge_input. I don't know why bridge(4) needs to take a lock here by itself. Ideally the locks would be taken once for the whole input processing.