aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/3c59x.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/net/3c59x.c')
-rw-r--r--drivers/net/3c59x.c16
1 files changed, 7 insertions, 9 deletions
diff --git a/drivers/net/3c59x.c b/drivers/net/3c59x.c
index 39db0e96815d..43dcc787a176 100644
--- a/drivers/net/3c59x.c
+++ b/drivers/net/3c59x.c
@@ -797,9 +797,9 @@ static void poll_vortex(struct net_device *dev)
797{ 797{
798 struct vortex_private *vp = netdev_priv(dev); 798 struct vortex_private *vp = netdev_priv(dev);
799 unsigned long flags; 799 unsigned long flags;
800 local_irq_save(flags); 800 local_irq_save_nort(flags);
801 (vp->full_bus_master_rx ? boomerang_interrupt:vortex_interrupt)(dev->irq,dev); 801 (vp->full_bus_master_rx ? boomerang_interrupt:vortex_interrupt)(dev->irq,dev);
802 local_irq_restore(flags); 802 local_irq_restore_nort(flags);
803} 803}
804#endif 804#endif
805 805
@@ -1764,6 +1764,7 @@ vortex_timer(unsigned long data)
1764 int next_tick = 60*HZ; 1764 int next_tick = 60*HZ;
1765 int ok = 0; 1765 int ok = 0;
1766 int media_status, old_window; 1766 int media_status, old_window;
1767 unsigned long flags;
1767 1768
1768 if (vortex_debug > 2) { 1769 if (vortex_debug > 2) {
1769 pr_debug("%s: Media selection timer tick happened, %s.\n", 1770 pr_debug("%s: Media selection timer tick happened, %s.\n",
@@ -1771,7 +1772,7 @@ vortex_timer(unsigned long data)
1771 pr_debug("dev->watchdog_timeo=%d\n", dev->watchdog_timeo); 1772 pr_debug("dev->watchdog_timeo=%d\n", dev->watchdog_timeo);
1772 } 1773 }
1773 1774
1774 disable_irq_lockdep(dev->irq); 1775 spin_lock_irqsave(&vp->lock, flags);
1775 old_window = ioread16(ioaddr + EL3_CMD) >> 13; 1776 old_window = ioread16(ioaddr + EL3_CMD) >> 13;
1776 EL3WINDOW(4); 1777 EL3WINDOW(4);
1777 media_status = ioread16(ioaddr + Wn4_Media); 1778 media_status = ioread16(ioaddr + Wn4_Media);
@@ -1794,10 +1795,7 @@ vortex_timer(unsigned long data)
1794 case XCVR_MII: case XCVR_NWAY: 1795 case XCVR_MII: case XCVR_NWAY:
1795 { 1796 {
1796 ok = 1; 1797 ok = 1;
1797 /* Interrupts are already disabled */
1798 spin_lock(&vp->lock);
1799 vortex_check_media(dev, 0); 1798 vortex_check_media(dev, 0);
1800 spin_unlock(&vp->lock);
1801 } 1799 }
1802 break; 1800 break;
1803 default: /* Other media types handled by Tx timeouts. */ 1801 default: /* Other media types handled by Tx timeouts. */
@@ -1851,7 +1849,7 @@ leave_media_alone:
1851 dev->name, media_tbl[dev->if_port].name); 1849 dev->name, media_tbl[dev->if_port].name);
1852 1850
1853 EL3WINDOW(old_window); 1851 EL3WINDOW(old_window);
1854 enable_irq_lockdep(dev->irq); 1852 spin_unlock_irqrestore(&vp->lock, flags);
1855 mod_timer(&vp->timer, RUN_AT(next_tick)); 1853 mod_timer(&vp->timer, RUN_AT(next_tick));
1856 if (vp->deferred) 1854 if (vp->deferred)
1857 iowrite16(FakeIntr, ioaddr + EL3_CMD); 1855 iowrite16(FakeIntr, ioaddr + EL3_CMD);
@@ -1885,12 +1883,12 @@ static void vortex_tx_timeout(struct net_device *dev)
1885 * Block interrupts because vortex_interrupt does a bare spin_lock() 1883 * Block interrupts because vortex_interrupt does a bare spin_lock()
1886 */ 1884 */
1887 unsigned long flags; 1885 unsigned long flags;
1888 local_irq_save(flags); 1886 local_irq_save_nort(flags);
1889 if (vp->full_bus_master_tx) 1887 if (vp->full_bus_master_tx)
1890 boomerang_interrupt(dev->irq, dev); 1888 boomerang_interrupt(dev->irq, dev);
1891 else 1889 else
1892 vortex_interrupt(dev->irq, dev); 1890 vortex_interrupt(dev->irq, dev);
1893 local_irq_restore(flags); 1891 local_irq_restore_nort(flags);
1894 } 1892 }
1895 } 1893 }
1896 1894