Another 2.2 version of 3c59x.c
Andrew Morton
andrewm@uow.edu.au
Sat Apr 22 03:03:24 2000
Guys,
I've put up another candidate patch for Linus & Alan's 2.2.15 3c59x.c.
It's at
http://www.uow.edu.au/~andrewm/linux/#3c59x-2.2
Please read the "April 22 description of changes" for details. New in
this patch:
- In boomerang_start_xmit(), move the
outw(DownUnstall, ioaddr + EL3_CMD);
statement to _after_ the manipulation and testing of vp->cur_tx.
This was causing a race between the NIC's download engine and
the driver. See
http://www.tux.org/hypermail/linux-vortex-bug/2000-Apr/ for the
discussion on this. (Thanks again, Bogdan).
- Added the HAS_NWAY to the 3c905C's description. Without
this, the 905C was failing to autonegotiate 100bT.
- Fixed a bug in the ISR's handling of "Too much work in
interrupt". It was doing this:
/* Disable all pending interrupts. */
outw(SetStatusEnb | ((~status) & 0x7FE), ioaddr + EL3_CMD);
which is quite wrong - it _enables_ all interrupts apart from
those which caused entry to the ISR at this time! Testing revealed
that this crashed the machine.
So I fed back Dave Hinds' 3c575_cb changes in this area.
Thanks to Dave for pointing this out.
I note that in Dave Hinds' change to 3c575_cb he removed this code:
if (--work_done < 0) {
- if ((status & (0x7fe - (UpComplete | DownComplete))) == 0) {
- /* Just ack these and return. */
- outw(AckIntr | UpComplete | DownComplete, ioaddr + EL3_CMD);
- } else {
printk(KERN_WARNING "%s: Too much work in interrupt, status "
Which I disagree with - the quick acking of download and upload events
works well in my testing. So damn well that I had to disable it to test
the other leg of the 'if' statement!
--
-akpm-
-------------------------------------------------------------------
To unsubscribe send a message body containing "unsubscribe"
to linux-vortex-request@beowulf.org