driver |
where dmemem 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 |
notes |
wm(knakahara) |
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() and TX_LOCK() partially |
no |
TX and RX differently |
TX_LOCK(mutex) and check sc_stopping in the beginning |
|
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 |
|
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) |
|
bcm53xx_eth |
in attach() |
lock, hwlock |
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 |
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 |