NetBSD Wiki/users/msaitoh/
Comparison of implementations of Ethernet drivers
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 |
Add a comment