PCMCIA ethernet problems (packet loss) remain in 2.3.41

From: Matt Yourst (yourst@mit.edu)
Date: Sun Feb 06 2000 - 04:10:15 EST


I've been trying the latest kernel builds and am having a problem with my
laptop's ethernet adapter. Somewhere between 2.3.33 (works perfectly) and
2.3.38, the ethernet card (an IBM PCMCIA Ethernet adapter using pcnet_cs.o)
reports constant receive errors as soon as I enable it, yet a few packets still
get through. The system was a Dell Inspiron with the TI PCI-1220 (rev 02)
CardBus controller. I understand that the PCMCIA/Cardbus code went through a big
revision around 2.3.36, but it seems that some hardware-specific bugs still
remain. As a test, I booted 2.3.41 to a shell (nothing else running) and started
/etc/rc.d/init.d/pcmcia manually. As soon as I did this, ifconfig starts
reporting errors:

eth0 ...after starting pcmcia...
          RX packets:11 errors:326 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:100
          Interrupt:10 Base address:0x300
...and a few seconds later...
          RX packets:11 errors:346 dropped:0 overruns:0 frame:0

This was on a fairly busy ethernet segment, so it appears that the driver is
reporting errors for every packet it sees, regardless of whether or not the
packet was intended for my system (in this test, I initiated no network activity
at all.) When I do start heavy network activity (for instance, downloading a big
file from a server on the same LAN), it's evident that packets are actually
being discarded to the point where things slow down more and more until all
packets are rejected.

For these tests, CONFIG_PCMCIA and CONFIG_CARDBUS were set and compiled into the
kernel, and CONFIG_I82365 was left out. gcc 2.95.2-pgcc and pcmcia-utils 3.1.8
were also used. It appears that 8390.c is doing the rejection around a piece of
code that's already received some attention regarding this:

/* Check for bogosity warned by 3c503 book: the status byte is never
   written. This happened a lot during testing! This code should be
   cleaned up someday. */
if (rx_frame.next != next_frame
...
  ei_local->stat.rx_errors++;
  continue;
}

However, this code is virtually identical to 2.3.33's, so it's not clear where
the problem lies. If anyone knows what the cause might be, just e-mail me for
more information if needed.

- Matt Yourst

-------------------------------------------------------------
 Matt T. Yourst Massachusetts Institute of Technology
 yourst@mit.edu 617.225.7690
 476 Memorial Drive Cambridge MA 02139
-------------------------------------------------------------

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.rutgers.edu
Please read the FAQ at http://www.tux.org/lkml/



This archive was generated by hypermail 2b29 : Mon Feb 07 2000 - 21:00:13 EST