On Fri, Jun 28, 2002 at 02:35:20AM -0500, Mike Silbersack wrote:
...
> The watchdog timer code in most of the drivers is rather conservative, and
> may not detect mid-transfer stalls.  I'll use the dc driver as an example:
> 
> In dc_start, if_timer = 5 is set.  Then, in dc_txeof, if_timer = 0,
> disabling the watchdog timer.  This means that after a _single_ frame is
> sent, any subsequent stall will not be recovered from by the watchdog.

ok, i think this is exactly the problem, and "conservative" is
an understatement, I would call that plain broken :)

Your fix seems the correct way to handle the problem,
I wonder if there is an easy way to put something like
this in a generic procedure (such as ether_output_frame)
that is called by all drivers instead of relying on the
individual drivers to do the right thing each one in its
own way...

> In the vr driver, we were having problems where such stalls could be
> caused by high load, and the ifconfig up / down process was getting
> annoying to users.  I worked around this by setting if_timer = 5 every
> time vr_txeof was entered, only setting if_timer = 0 at the point when the
> _entire_ transmit buffer list was emptied.
> 
> (See if_vr.c rev 1.49 to see how I did it in that driver.)
> 
> You should be able to do something similar in all of the drivers, and I
> have indeed thought of doing so.  Could you code up and test such a patch
> for whatever card you are using in your test environment to see if it
> is a successful workaround?

yes i will try it tonight.

        thanks
        luigi

To Unsubscribe: send mail to [EMAIL PROTECTED]
with "unsubscribe freebsd-net" in the body of the message

Reply via email to