From: chinmay albal <albal@in.ibm.com>

We sometimes receive a "Bus master arbitration failure, status ffff" error
on pcnet32 drivers while running a huge network load on a 2.6.x kernel. 
Applying spinlocks on the watchdog timer routine helps getting across the
problem.  A patch for the same is given below.



---

 drivers/net/pcnet32.c |    6 +++++-
 1 files changed, 5 insertions(+), 1 deletion(-)

diff -puN drivers/net/pcnet32.c~pcnet32-locking-fix drivers/net/pcnet32.c
--- 25/drivers/net/pcnet32.c~pcnet32-locking-fix	2004-02-06 23:25:58.000000000 -0800
+++ 25-akpm/drivers/net/pcnet32.c	2004-02-06 23:25:58.000000000 -0800
@@ -1708,12 +1708,16 @@ static int pcnet32_ioctl(struct net_devi
 static void pcnet32_watchdog(struct net_device *dev)
 {
     struct pcnet32_private *lp = dev->priv;
+    unsigned long flags;
+
+    spin_lock_irqsave(&lp->lock, flags);
 
     /* Print the link status if it has changed */
     if (lp->mii)
 	mii_check_media (&lp->mii_if, 1, 0);
-
     mod_timer (&(lp->watchdog_timer), PCNET32_WATCHDOG_TIMEOUT);
+
+    spin_unlock_irqrestore(&lp->lock, flags);
 }
 
 static struct pci_driver pcnet32_driver = {

_