--- 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 2015/02/05 08:28:30 1.5 @@ -1 +1,119 @@ -Planned construction site. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
driverwhere dmamem is allocated invariations of mutexif_init lockif_start lockif_stop lockif_ioctl locksoftint(9)based TX and RX?TX and TX are locked with mutexcallout locknotes
wm(knakahara+ozaki-r)in attach()tx, rx, coreCORE_LOCK(spin mutex)TX_LOCK(spin mutex) + sc_stopping flagCORE_LOCK(spin mutex)+sc_stopping flaguse CORE_LOCK(spin mutex) and TX_LOCK(spin mutex) partiallyNoTX and RX differentlyTX_LOCK(mutex) and check sc_stopping in the beginning
vioifin attach()tx, rx, ctrl_waitnot taken?TX_LOCK(mutex)+sc_stopping checkTX, RX + sc_stopping checksplnet()only RX is softint'edTX and RX differentlycallout isn't used
vmxnet
pq3etsecin attach()lock, hwlock, mdio_locknot taken?not taken. Set flag with atomic_or_uint() and call softintr_schedule()not taken?splnet()Yessc_hwlock is for hard interrput. sc_lock is for software interrupt. TX and RX use the same lockmutex_enter(sc_lock)
bcm53xx_ethin attach()lock, hwlocknot taken?not taken. Set flag with atomic_or_uint() and call softintr_schedule()not taken?splnet()Yessc_hwlock is for hard interrput. sc_lock is for software interrupt. TX and RX use the same lockcallout isn't used
ixgin init() for rx jumbo, in attach() for otherstx, rx, coreCORE_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 differentlyCORE_LOCK() in the beginning
bnxin attach()txsplnet() in the beginningnot taken?not taken?splnet() in the beginningNoonly TX uses mutexsplnet() in the beginning
bgein attach()nonesplnet() in the beginningnot taken?not taken?splnet() in the beginningNoNosplnet() in the beginningmutex is not used at all