Index: linux-wbsd/drivers/net/8139cp.c =================================================================== --- linux-wbsd/drivers/net/8139cp.c (revision 165) +++ linux-wbsd/drivers/net/8139cp.c (working copy) @@ -1204,20 +1204,11 @@ cp_init_hw(cp); - rc = request_irq(dev->irq, cp_interrupt, SA_SHIRQ, dev->name, dev); - if (rc) - goto err_out_hw; - netif_carrier_off(dev); mii_check_media(&cp->mii_if, netif_msg_link(cp), TRUE); netif_start_queue(dev); return 0; - -err_out_hw: - cp_stop_hw(cp); - cp_free_rings(cp); - return rc; } static int cp_close (struct net_device *dev) @@ -1238,7 +1229,6 @@ spin_unlock_irqrestore(&cp->lock, flags); synchronize_irq(dev->irq); - free_irq(dev->irq, dev); cp_free_rings(cp); return 0; @@ -1813,6 +1803,10 @@ if (rc) goto err_out_iomap; + rc = request_irq(dev->irq, cp_interrupt, SA_SHIRQ, dev->name, dev); + if (rc) + goto err_out_unreg; + printk (KERN_INFO "%s: RTL-8139C+ at 0x%lx, " "%02x:%02x:%02x:%02x:%02x:%02x, " "IRQ %d\n", @@ -1832,6 +1826,8 @@ return 0; +err_out_unreg: + unregister_netdev(dev); err_out_iomap: iounmap(regs); err_out_res: @@ -1852,6 +1848,7 @@ if (!dev) BUG(); + free_irq(dev->irq, dev); unregister_netdev(dev); iounmap(cp->regs); if (cp->wol_enabled) pci_set_power_state (pdev, PCI_D0);