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