driver where dmamem is allocated in variations of mutex if_init lock if_start lock if_stop lock if_ioctl lock softint(9)based TX and RX? TX and TX are locked with mutex callout lock MSI / MSI-X support Multi-queue support notes
wm in attach() tx, rx, core CORE_LOCK(spin mutex) TX_LOCK(spin mutex) + sc_stopping flag CORE_LOCK(spin mutex)+sc_stopping flag use CORE_LOCK(spin mutex) and TX_LOCK(spin mutex) partially Yes by default. It can be changed by kernel options. See wm.4. TX and RX differently TX_LOCK(mutex) and check sc_stopping in the beginning Yes TX and RX
vioif in attach() tx, rx, ctrl_wait not taken? TX_LOCK(mutex)+sc_stopping check TX, RX + sc_stopping check splnet() only RX is softint'ed TX and RX differently callout isn't used Yes (MSI-X only) No
vmxnet
pq3etsec in attach() lock, hwlock, mdio_lock not taken? not taken. Set flag with atomic_or_uint() and call softintr_schedule() not taken? splnet() Yes sc_hwlock is for hard interrput. sc_lock is for software interrupt. TX and RX use the same lock mutex_enter(sc_lock)
bcmeth(4) in attach() lock, hwlock not taken? not taken. Set flag with atomic_or_uint() and call softintr_schedule() not taken? splnet() Yes. The interrupt handler calls softint or workqueue depending on the load. sc_hwlock is for hard interrput. sc_lock is for software interrupt. TX and RX use the same lock callout isn't used
ixg in init() for rx jumbo, in attach() for others tx, rx, core CORE_LOCK(adaptive mutex) TX_LOCK(spin mutex) CORE_LOCK(spin mutex) use core lock for init() and set_multi() Yes. Only one time is execulted in the interupt context. If more request exist, softint is issued. TX and RX differently CORE_LOCK() in the beginning
bnx in attach() tx splnet() in the beginning not taken? not taken? splnet() in the beginning No only TX uses mutex splnet() in the beginning
bge in attach() none splnet() in the beginning not taken? not taken? splnet() in the beginning No No splnet() in the beginning mutex is not used at all