cvs commit: src/sys/pci if_xl.c if_xlreg.h

Bruce Evans bde at zeta.org.au
Tue Dec 5 23:18:51 PST 2006


On Wed, 6 Dec 2006, Bruce Evans wrote:

> On Wed, 6 Dec 2006, Marius Strobl wrote:
> ...
>>    While at it relax the watchdog a bit by reloading it in xl_txeof()/
>>    xl_txeof_90xB() if there are still packets enqueued.
>
> Er, xl_txeof_90xB() was one of the 20-30% of txeof() routines that
> handled this correctly.  The timeout shouldn't be touched in xx_txeof()
> except to clear it when all descriptors have been handled.
> ...
> xl_txeof_90xB() now reloads the timeout without checking anything
> except that there are still some unhandled descriptors.  ISTR that
> this bug has been fixed in a few drivers, mainly ones that support
> DEVICE_POLLING.  Grepping for "0 : 5" shows the bug in the following
> drivers: dc, pcn, sis, xl.  All of these except pcn support

Reference for a previous fix: if_rl.c 1.134.  This actually reloads
the timeout to 5 if it is 0 AND there is an unhandled tx descriptor.
I think this case shouldn't happen (the watchdog should have handled
it), and if it does it should be handled by resetting.  Maybe it only
happened due to the race decrementing if_timer.

Bruce


More information about the cvs-src mailing list