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