cvs commit: src/sys/dev/netif/nfe if_nfe.c
Matthew Dillon
dillon at crater.dragonflybsd.org
Thu Aug 9 00:26:46 PDT 2007
dillon 2007/08/09 00:24:50 PDT
DragonFly src repository
Modified files:
sys/dev/netif/nfe if_nfe.c
Log:
Introduce two delays in nfe_stop().
The first seems to fix or greatly reduce instances of watchdog failures.
I theorize that a TX KICK occuring just prior to a nfe_stop() is confusing
the microcontroller due to the polled nature of the rest of the tx/rx control
registers and the (almost certain) hardware aided TX KICK bit. This
confusion survives the nfe_stop() and nfe_init(). I'll again theorize that
the KICK, which is probably a microcontroller interrupt, is not being reset
and is being handled at some inappropriate point in time in the middle of
nfe_stop() or nfe_init().
The second delay gives the device time to actually stop the DMA engine
before we destroy the ring buffers. Even if those registers were under
direct hardware control (and I really doubt they are), DMA just doesn't
instantly stop when you tell it to.
Revision Changes Path
1.13 +27 -0 src/sys/dev/netif/nfe/if_nfe.c
http://www.dragonflybsd.org/cvsweb/src/sys/dev/netif/nfe/if_nfe.c.diff?r1=1.12&r2=1.13&f=u
More information about the Commits
mailing list