[tulip-bug] FreeBSD Problems with dc(4) ADMtek AN985 chip
Donald Becker
becker@scyld.com
Fri Sep 6 05:18:01 2002
On Thu, 5 Sep 2002, Martin Blapp wrote:
> >From a cold boot into Linux, is see the same symptoms as FreeBSD.
> Linux kernel 2.4.9-13 ... The windows driver seems to work :-( .
Which Linux driver versions have you tried? Specifically, have you
tried an unmodified tulip driver?
> >From the FreeBSD dc manpage.
>
> The ADMtek AL981 chip (and possibly the AN985 as well) has been observed
> to sometimes wedge on transmit: this appears to happen when the driver
> queues a sequence of frames which cause it to wrap from the end of the
> transmit descriptor ring back to the beginning. The dc driver attempts
> to avoid this condition by not queuing any frames past the end of the
> transmit ring during a single invocation of the dc_start() routine. This
> workaround has a negligible impact on transmit performance.
This never applies to the Linux driver.
Linux has linear skbuffs (ignoring sendfile-zerocopy), and thus queues
each frame into a single descriptor. There will never be a case where
a frame wraps around the end of the ring. My driver additionally avoids
bugs (in several other chips, but perhaps the Comet as well) by both
chaining descriptors into a ring using the 'next' pointer and marking the final
descriptor as wrapping the ring.
This technique cannot be efficiently used with mbufs in *BSD, so there
must be two different ring handling code paths: both chained
and wrapped-ring configurations.
> But this workaround seems not to work for me. For some reason, replugging
> the cable works for me, ifconfig (down/up) does not.
That's very likely a media selection problem, rather than a Rx
descriptor problem. Of course resetting the chip will clear a
descriptor hang, but that wouldn't be my first guess.
--
Donald Becker becker@scyld.com
Scyld Computing Corporation http://www.scyld.com
410 Severn Ave. Suite 210 Second Generation Beowulf Clusters
Annapolis MD 21403 410-990-9993