[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