Signed-off-by: James Nelson <james4765@xxxxxxxxx> diff -urN --exclude='*~' linux-2.6.10-mm2-original/drivers/net/tulip/xircom_tulip_cb.c linux-2.6.10-mm2/drivers/net/tulip/xircom_tulip_cb.c --- linux-2.6.10-mm2-original/drivers/net/tulip/xircom_tulip_cb.c 2005-01-08 12:16:34.000000000 -0500 +++ linux-2.6.10-mm2/drivers/net/tulip/xircom_tulip_cb.c 2005-01-11 18:37:42.485410177 -0500 @@ -361,8 +361,8 @@ TxThresh10 | TxStoreForw | TxThreshMask | EnableTxRx | FullDuplexBit; int csr5, csr5_22_20, csr5_19_17, currcsr6, attempts = 200; unsigned long flags; - save_flags(flags); - cli(); + /* disable interrupts */ + local_irq_save(flags); /* mask out the reserved bits that always read 0 on the Xircom cards */ newcsr6 &= ~ReservedZeroMask; /* or in the reserved bits that always read 1 */ @@ -371,7 +371,7 @@ if (((newcsr6 & strict_bits) == (currcsr6 & strict_bits)) || ((currcsr6 & ~EnableTxRx) == 0)) { outl(newcsr6, ioaddr + CSR6); /* safe */ - restore_flags(flags); + local_irq_restore(flags); return; } /* make sure the transmitter and receiver are stopped first */ @@ -389,7 +389,7 @@ printk(KERN_INFO DRV_NAME ": outl_CSR6 too many attempts," "csr5=0x%08x\n", csr5); outl(newcsr6, ioaddr + CSR6); /* unsafe but do it anyway */ - restore_flags(flags); + local_irq_restore(flags); return; } outl(currcsr6, ioaddr + CSR6); @@ -397,7 +397,7 @@ } /* now it is safe to change csr6 */ outl(newcsr6, ioaddr + CSR6); - restore_flags(flags); + local_irq_restore(flags); } @@ -1473,16 +1473,14 @@ return -ENODEV; return 0; case SIOCGMIIREG: /* Read MII PHY register. */ - save_flags(flags); - cli(); + spin_lock_irqsave(&tp->lock, flags); data[3] = mdio_read(dev, data[0] & 0x1f, data[1] & 0x1f); - restore_flags(flags); + spin_unlock_irqrestore(&tp->lock, flags); return 0; case SIOCSMIIREG: /* Write MII PHY register. */ if (!capable(CAP_NET_ADMIN)) return -EPERM; - save_flags(flags); - cli(); + spin_lock_irqsave(&tp->lock, flags); if (data[0] == tp->phys[0]) { u16 value = data[2]; switch (data[1]) { @@ -1502,7 +1500,7 @@ check_duplex(dev); } mdio_write(dev, data[0] & 0x1f, data[1] & 0x1f, data[2]); - restore_flags(flags); + spin_unlock_irqrestore(&tp->lock, flags); return 0; default: return -EOPNOTSUPP; @@ -1610,7 +1608,7 @@ unsigned int entry; int dummy = -1; - save_flags(flags); cli(); + spin_lock_irqsave(&tp->lock, flags); entry = tp->cur_tx++ % TX_RING_SIZE; if (entry != 0) { @@ -1637,7 +1635,7 @@ } if (dummy >= 0) tp->tx_ring[dummy].status = Tx0DescOwned; - restore_flags(flags); + spin_unlock_irqrestore(&tp->lock, flags); /* Trigger an immediate transmit demand. */ outl(0, ioaddr + CSR1); } - : send the line "unsubscribe linux-net" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html