--- wikisrc/users/msaitoh/Comparison_of_implementations_of_Ethernet_drivers.mdwn 2015/02/05 04:15:56 1.1 +++ wikisrc/users/msaitoh/Comparison_of_implementations_of_Ethernet_drivers.mdwn 2018/01/18 08:58:02 1.9 @@ -1 +1,137 @@ -Planned construction site. +
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 | +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 | +