diff options
author | Jeff Garzik <jeff@garzik.org> | 2006-03-11 13:35:31 -0500 |
---|---|---|
committer | Jeff Garzik <jeff@garzik.org> | 2006-03-11 13:35:31 -0500 |
commit | 749dfc70554f2c9e6624ac843d66571265ed9338 (patch) | |
tree | bf591255b3f158222f90852d53c4279e6e7e9ced /drivers/net/tulip/de2104x.c | |
parent | 74f5ec29ae93aa42c49f4285c20c457afe937881 (diff) | |
parent | 0992a5d029181421877a716eaf99145828ff7eae (diff) | |
download | op-kernel-dev-749dfc70554f2c9e6624ac843d66571265ed9338.zip op-kernel-dev-749dfc70554f2c9e6624ac843d66571265ed9338.tar.gz |
Merge branch 'upstream-fixes'
Diffstat (limited to 'drivers/net/tulip/de2104x.c')
-rw-r--r-- | drivers/net/tulip/de2104x.c | 26 |
1 files changed, 13 insertions, 13 deletions
diff --git a/drivers/net/tulip/de2104x.c b/drivers/net/tulip/de2104x.c index d6c3d52..6299e18 100644 --- a/drivers/net/tulip/de2104x.c +++ b/drivers/net/tulip/de2104x.c @@ -1357,7 +1357,6 @@ static int de_open (struct net_device *dev) { struct de_private *de = dev->priv; int rc; - unsigned long flags; if (netif_msg_ifup(de)) printk(KERN_DEBUG "%s: enabling interface\n", dev->name); @@ -1371,18 +1370,20 @@ static int de_open (struct net_device *dev) return rc; } - rc = de_init_hw(de); - if (rc) { - printk(KERN_ERR "%s: h/w init failure, err=%d\n", - dev->name, rc); - goto err_out_free; - } + dw32(IntrMask, 0); rc = request_irq(dev->irq, de_interrupt, SA_SHIRQ, dev->name, dev); if (rc) { printk(KERN_ERR "%s: IRQ %d request failure, err=%d\n", dev->name, dev->irq, rc); - goto err_out_hw; + goto err_out_free; + } + + rc = de_init_hw(de); + if (rc) { + printk(KERN_ERR "%s: h/w init failure, err=%d\n", + dev->name, rc); + goto err_out_free_irq; } netif_start_queue(dev); @@ -1390,11 +1391,8 @@ static int de_open (struct net_device *dev) return 0; -err_out_hw: - spin_lock_irqsave(&de->lock, flags); - de_stop_hw(de); - spin_unlock_irqrestore(&de->lock, flags); - +err_out_free_irq: + free_irq(dev->irq, dev); err_out_free: de_free_rings(de); return rc; @@ -1450,6 +1448,8 @@ static void de_tx_timeout (struct net_device *dev) synchronize_irq(dev->irq); de_clean_rings(de); + de_init_rings(de); + de_init_hw(de); netif_wake_queue(dev); |