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 |