I downloaded the pcmcia-cs 3.1.24 package and hand-merged the bugfix(es?) into 2.4.1's xirc2ps_cs.c. A(n attempt at a) patch to bring 2.4.1 up to pcmcia-cs's version is attached to this email. So far, no problems, but it'll be at least 48 hours before I can say whether it happens or not.. This is also available at http://incandescent.mp3revolution.net/kernel/xirc2ps_cs/. Looking through logs, it appears as though the problem first appeared in kernel 2.4.1-pre7, and has become frequent enough to annoy me as of 2.4.1. Did anything change dealing w/ this driver/card between 2.4.0 and 2.4.1-pre7? On Fri, Feb 02, 2001 at 09:20:40PM -0800, David Hinds wrote: > > On Fri, Feb 02, 2001 at 11:54:31PM -0500, [EMAIL PROTECTED] wrote: > > > > Each time I get a transmit timeout, or UDP: short packet error, > > networking on my laptop seems to go down. Reinsertion of the > > card temporarily fixes it, and if I leave it long enough it > > also fixes itself. > > Does the same happen with a 2.2 kernel and the 3.1.24 PCMCIA drivers? > There is a bug fix in the 3.1.24 xirc2ps_cs driver that hasn't been > merged into the kernel tree yet. > > -- Dave -- "... being a Linux user is sort of like living in a house inhabited by a large family of carpenters and architects. Every morning when you wake up, the house is a little different. Maybe there is a new turret, or some walls have moved. Or perhaps someone has temporarily removed the floor under your bed." - Unix for Dummies, 2nd Edition -- found in the .sig of Rob Riggs, [EMAIL PROTECTED]
diff -urN linux.old/drivers/net/pcmcia/xirc2ps_cs.c linux/drivers/net/pcmcia/xirc2ps_cs.c --- linux.old/drivers/net/pcmcia/xirc2ps_cs.c Thu Oct 26 19:52:16 2000 +++ linux/drivers/net/pcmcia/xirc2ps_cs.c Sat Feb 3 01:15:49 2001 @@ -382,6 +382,7 @@ static void do_powerdown(struct net_device *dev); static int do_stop(struct net_device *dev); + /*=============== Helper functions =========================*/ static void flush_stale_links(void) @@ -1348,7 +1349,6 @@ * packets */ lp->stats.rx_dropped++; DEBUG(2, "%s: RX drop, too much done\n", dev->name); - PutWord(XIRCREG0_DO, 0x8000); /* issue cmd: skip_rx_packet */ } else if (rsr & PktRxOk) { struct sk_buff *skb; @@ -1423,8 +1423,7 @@ if (!(rsr & PhyPkt)) lp->stats.multicast++; } - PutWord(XIRCREG0_DO, 0x8000); /* issue cmd: skip_rx_packet */ - } else { + } else { /* bad packet */ DEBUG(5, "rsr=%#02x\n", rsr); } if (rsr & PktTooLong) { @@ -1439,6 +1438,9 @@ lp->stats.rx_fifo_errors++; /* okay ? */ DEBUG(3, "%s: Alignment error\n", dev->name); } + + /* clear the received/dropped/error packet */ + PutWord(XIRCREG0_DO, 0x8000); /* issue cmd: skip_rx_packet */ /* get the new ethernet status */ eth_status = GetByte(XIRCREG_ESR);