[Fwd: Call for testers: 2.2 patch for 3x59x.c]

Andrew Morton andrewm@uow.edu.au
Sun Apr 16 04:25:50 2000


This is an announcement which I sent to the linux kernel list today.  I
would really appreciate it if people could devote some time for testing
out this patch.  Particularly for the EISA Vortex cards.

Thanks.

-------- Original Message --------
Subject: Call for testers: 2.2 patch for 3x59x.c
Date: Sun Apr 16 04:25:50 2000
From: Andrew Morton <andrewm@uow.edu.au>
To: lkml <linux-kernel@vger.rutgers.edu>
CC: Bogdan Costescu <Bogdan.Costescu@IWR.Uni-Heidelberg.De>,Donald
Becker <becker@scyld.com>


I have a patch against 2.2.15's drivers/net/3c59x.c which needs some
testing.  This is the driver for 29 distinct 3Com NICs (listed below).

I would appreciate it if people who have one of these cards could test
out the patch and:

  If it works, let me know direct (including card type)

  If it has problems, please report them on netdev@oss.sgi.com
  (Subscribe with 'echo subscribe netdev | mail majordomo@oss.sgi.com')

The patch (and the entire 3c59x.c) are available at

   http://www.uow.edu.au/~andrewm/linux/index.html#3c59x-2.2

Changes:

   - Don't set RxComplete in boomerang interrupt enable reg

     This was causing system lockups when the driver was under
     heavy abuse.  More details at

       http://www.wcug.wwu.edu/lists/netdev/200004/msg00019.html

     This part of the patch was sent to Alan a week or so ago.

   - Added standard spinlocking.

     This is Don's driver and he has issues with the approach
     which 2.3 takes to driver locking.  It serialises the Rx and Tx
     interrupt wrt the hard_start_xmit() routine in a way which is not
     obviously necessary.

     What tipped my balance was the opportunity to remove the
     global save_flags()/cli()/restore_flags() from vortex_start_xmit()
     (See below).  This will be a _net_ win and gives the 2.2 driver
     the same locking structure as the 2.3 driver.

   - Removed setting/clearing of dev->interrupt

     Not required with the standard spinlock architecture.
  
   - Removed vp->in_interrupt

     It was unused.

   - spinlock in vortex_timer to protect mdio functions

     There were potential SMP races where the mdio manipulation
     functions can be reentered.

   - spinlock in vortex_ioctl()

     Protect the mdio functions and avoids the possibility of an
     interrupt switching register windows under the ioctl function's
     feet.  It also serialises ioctl() wrt get_stats().

   - spinlock in vortex_get_stats().

     Ditto.

   - disable local interrupts around call to vortex_interrupt in
     vortex_tx_timeout() (So vortex_interrupt can use spin_lock())

     vortex_interrupt() can be called from non-interrupt context. 
     If an interrupt happened at this time, vortex_interrupt() would be
     reentered and would deadlock on the spinlock.  Disable local
     interrupts to prevent this.

   - Removed global save/restore_flags() and cli() from get_stats
     and vortex_start_xmit()

     Good riddance.  The code sequence

     save_flags()
     cli()
     restore_flags()

     Typically takes 1.5 microseconds.  But it _can_ take several
     milliseconds, while the controlling processor waits for all the
     other processors to reenable interrupts and take the IPI.  I
     expect we are being bitten by the console code here.

   - Select window 3 in vortex_timer()'s write to Wn3_MAC_Ctrl

     The media selection state machine can write a value to
     register window 4 which was supposed to go into window 3.  The fix
     for this has been floating in and out of these drivers for some
     time.  Let's make it stick this time.

   - In vortex_start_xmit(), move the lock to _after_ we've
     altered vp->cur_tx and vp->tx_full.  This defeats the race between
     vortex_start_xmit() and vortex_interrupt which was identified by
     Bogdan Costescu.

     This is an SMP race which was causing the driver to die once
     every couple of weeks in the Heidelberg University's Beowulf
     cluster.  It was painstakingly tracked, trailed, cornered and
     killed by Bodgan Costescu <Bogdan.Costescu@IWR.Uni-Heidelberg.De>.
     Many thanks to him.  Details are on the linux-vortex-bug mailing
     list.

   - Merged back support for six new cards from various sources.

     [ Mainly Don's latest drivers ]

     3c592 EISA 10mbps Demon/Vortex
     3c597 EISA Fast Demon/Vortex
     3c900 Cyclone 10Mbps TPO
     3c900 Cyclone 10Mbps TPC
     3CCFEM656 Cyclone CardBus
     3c450 Cyclone/unknown

Supported cards

   3c590 Vortex 10Mbps
   3c592 EISA 10mbps Demon/Vortex
   3c597 EISA Fast Demon/Vortex
   3c595 Vortex 100baseTx
   3c595 Vortex 100baseT4
   3c595 Vortex 100base-MII
   3Com Vortex
   3c900 Boomerang 10baseT
   3c900 Boomerang 10Mbps Combo
   3c900 Cyclone 10Mbps Combo
   3c900B-FL Cyclone 10base-FL
   3c900 Cyclone 10Mbps TPO
   3c900 Cyclone 10Mbps TPC
   3c905 Boomerang 100baseTx
   3c905 Boomerang 100baseT4
   3c905B Cyclone 100baseTx
   3c905B Cyclone 10/100/BNC
   3c905B-FX Cyclone 100baseFx
   3c905C Tornado
   3c980 Cyclone
   3cSOHO100-TX Hurricane
   3c555 Laptop Hurricane
   3c575 Boomerang CardBus
   3CCFE575 Cyclone CardBus
   3CCFE656 Cyclone CardBus
   3CCFEM656 Cyclone CardBus
   3c575 series CardBus (unknown version)
   3c450 Cyclone/unknown
   3Com Boomerang (unknown version)

   

-- 
-akpm-
-------------------------------------------------------------------
To unsubscribe send a message body containing "unsubscribe"
to linux-vortex-request@beowulf.org