[netdrvr] Fix register_netdev() races in older ISA net drivers
This commit is contained in:
parent
88d7bd8cb9
commit
b1fc5505e0
21 changed files with 156 additions and 228 deletions
|
@ -171,12 +171,7 @@ struct net_device * __init el2_probe(int unit)
|
|||
err = do_el2_probe(dev);
|
||||
if (err)
|
||||
goto out;
|
||||
err = register_netdev(dev);
|
||||
if (err)
|
||||
goto out1;
|
||||
return dev;
|
||||
out1:
|
||||
cleanup_card(dev);
|
||||
out:
|
||||
free_netdev(dev);
|
||||
return ERR_PTR(err);
|
||||
|
@ -356,6 +351,10 @@ el2_probe1(struct net_device *dev, int ioaddr)
|
|||
dev->poll_controller = ei_poll;
|
||||
#endif
|
||||
|
||||
retval = register_netdev(dev);
|
||||
if (retval)
|
||||
goto out1;
|
||||
|
||||
if (dev->mem_start)
|
||||
printk("%s: %s - %dkB RAM, 8kB shared mem window at %#6lx-%#6lx.\n",
|
||||
dev->name, ei_status.name, (wordlength+1)<<3,
|
||||
|
@ -715,11 +714,8 @@ init_module(void)
|
|||
dev->base_addr = io[this_dev];
|
||||
dev->mem_end = xcvr[this_dev]; /* low 4bits = xcvr sel. */
|
||||
if (do_el2_probe(dev) == 0) {
|
||||
if (register_netdev(dev) == 0) {
|
||||
dev_el2[found++] = dev;
|
||||
continue;
|
||||
}
|
||||
cleanup_card(dev);
|
||||
dev_el2[found++] = dev;
|
||||
continue;
|
||||
}
|
||||
free_netdev(dev);
|
||||
printk(KERN_WARNING "3c503.c: No 3c503 card found (i/o = 0x%x).\n", io[this_dev]);
|
||||
|
|
|
@ -365,7 +365,7 @@ static int nopnp;
|
|||
#endif /* __ISAPNP__ */
|
||||
|
||||
static struct net_device *corkscrew_scan(int unit);
|
||||
static void corkscrew_setup(struct net_device *dev, int ioaddr,
|
||||
static int corkscrew_setup(struct net_device *dev, int ioaddr,
|
||||
struct pnp_dev *idev, int card_number);
|
||||
static int corkscrew_open(struct net_device *dev);
|
||||
static void corkscrew_timer(unsigned long arg);
|
||||
|
@ -539,10 +539,9 @@ static struct net_device *corkscrew_scan(int unit)
|
|||
printk(KERN_INFO "3c515 Resource configuration register %#4.4x, DCR %4.4x.\n",
|
||||
inl(ioaddr + 0x2002), inw(ioaddr + 0x2000));
|
||||
/* irq = inw(ioaddr + 0x2002) & 15; */ /* Use the irq from isapnp */
|
||||
corkscrew_setup(dev, ioaddr, idev, cards_found++);
|
||||
SET_NETDEV_DEV(dev, &idev->dev);
|
||||
pnp_cards++;
|
||||
err = register_netdev(dev);
|
||||
err = corkscrew_setup(dev, ioaddr, idev, cards_found++);
|
||||
if (!err)
|
||||
return dev;
|
||||
cleanup_card(dev);
|
||||
|
@ -558,8 +557,7 @@ static struct net_device *corkscrew_scan(int unit)
|
|||
|
||||
printk(KERN_INFO "3c515 Resource configuration register %#4.4x, DCR %4.4x.\n",
|
||||
inl(ioaddr + 0x2002), inw(ioaddr + 0x2000));
|
||||
corkscrew_setup(dev, ioaddr, NULL, cards_found++);
|
||||
err = register_netdev(dev);
|
||||
err = corkscrew_setup(dev, ioaddr, NULL, cards_found++);
|
||||
if (!err)
|
||||
return dev;
|
||||
cleanup_card(dev);
|
||||
|
@ -568,7 +566,7 @@ static struct net_device *corkscrew_scan(int unit)
|
|||
return NULL;
|
||||
}
|
||||
|
||||
static void corkscrew_setup(struct net_device *dev, int ioaddr,
|
||||
static int corkscrew_setup(struct net_device *dev, int ioaddr,
|
||||
struct pnp_dev *idev, int card_number)
|
||||
{
|
||||
struct corkscrew_private *vp = netdev_priv(dev);
|
||||
|
@ -691,6 +689,8 @@ static void corkscrew_setup(struct net_device *dev, int ioaddr,
|
|||
dev->get_stats = &corkscrew_get_stats;
|
||||
dev->set_multicast_list = &set_rx_mode;
|
||||
dev->ethtool_ops = &netdev_ethtool_ops;
|
||||
|
||||
return register_netdev(dev);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -572,6 +572,10 @@ static int __init do_elmc_probe(struct net_device *dev)
|
|||
dev->flags&=~IFF_MULTICAST; /* Multicast doesn't work */
|
||||
#endif
|
||||
|
||||
retval = register_netdev(dev);
|
||||
if (retval)
|
||||
goto err_out;
|
||||
|
||||
return 0;
|
||||
err_out:
|
||||
mca_set_adapter_procfn(slot, NULL, NULL);
|
||||
|
@ -600,12 +604,7 @@ struct net_device * __init elmc_probe(int unit)
|
|||
err = do_elmc_probe(dev);
|
||||
if (err)
|
||||
goto out;
|
||||
err = register_netdev(dev);
|
||||
if (err)
|
||||
goto out1;
|
||||
return dev;
|
||||
out1:
|
||||
cleanup_card(dev);
|
||||
out:
|
||||
free_netdev(dev);
|
||||
return ERR_PTR(err);
|
||||
|
@ -1288,12 +1287,9 @@ int init_module(void)
|
|||
dev->irq=irq[this_dev];
|
||||
dev->base_addr=io[this_dev];
|
||||
if (do_elmc_probe(dev) == 0) {
|
||||
if (register_netdev(dev) == 0) {
|
||||
dev_elmc[this_dev] = dev;
|
||||
found++;
|
||||
continue;
|
||||
}
|
||||
cleanup_card(dev);
|
||||
dev_elmc[this_dev] = dev;
|
||||
found++;
|
||||
continue;
|
||||
}
|
||||
free_netdev(dev);
|
||||
if (io[this_dev]==0)
|
||||
|
|
|
@ -146,12 +146,7 @@ struct net_device * __init ac3200_probe(int unit)
|
|||
err = do_ac3200_probe(dev);
|
||||
if (err)
|
||||
goto out;
|
||||
err = register_netdev(dev);
|
||||
if (err)
|
||||
goto out1;
|
||||
return dev;
|
||||
out1:
|
||||
cleanup_card(dev);
|
||||
out:
|
||||
free_netdev(dev);
|
||||
return ERR_PTR(err);
|
||||
|
@ -273,7 +268,14 @@ static int __init ac_probe1(int ioaddr, struct net_device *dev)
|
|||
dev->poll_controller = ei_poll;
|
||||
#endif
|
||||
NS8390_init(dev, 0);
|
||||
|
||||
retval = register_netdev(dev);
|
||||
if (retval)
|
||||
goto out2;
|
||||
return 0;
|
||||
out2:
|
||||
if (ei_status.reg0)
|
||||
iounmap((void *)dev->mem_start);
|
||||
out1:
|
||||
free_irq(dev->irq, dev);
|
||||
out:
|
||||
|
@ -392,11 +394,8 @@ init_module(void)
|
|||
dev->base_addr = io[this_dev];
|
||||
dev->mem_start = mem[this_dev]; /* Currently ignored by driver */
|
||||
if (do_ac3200_probe(dev) == 0) {
|
||||
if (register_netdev(dev) == 0) {
|
||||
dev_ac32[found++] = dev;
|
||||
continue;
|
||||
}
|
||||
cleanup_card(dev);
|
||||
dev_ac32[found++] = dev;
|
||||
continue;
|
||||
}
|
||||
free_netdev(dev);
|
||||
printk(KERN_WARNING "ac3200.c: No ac3200 card found (i/o = 0x%x).\n", io[this_dev]);
|
||||
|
|
|
@ -319,13 +319,7 @@ struct net_device * __init cs89x0_probe(int unit)
|
|||
}
|
||||
if (err)
|
||||
goto out;
|
||||
err = register_netdev(dev);
|
||||
if (err)
|
||||
goto out1;
|
||||
return dev;
|
||||
out1:
|
||||
outw(PP_ChipID, dev->base_addr + ADD_PORT);
|
||||
release_region(dev->base_addr, NETCARD_IO_EXTENT);
|
||||
out:
|
||||
free_netdev(dev);
|
||||
printk(KERN_WARNING "cs89x0: no cs8900 or cs8920 detected. Be sure to disable PnP with SETUP\n");
|
||||
|
@ -735,7 +729,13 @@ printk("PP_addr=0x%x\n", inw(ioaddr + ADD_PORT));
|
|||
printk("\n");
|
||||
if (net_debug)
|
||||
printk("cs89x0_probe1() successful\n");
|
||||
|
||||
retval = register_netdev(dev);
|
||||
if (retval)
|
||||
goto out3;
|
||||
return 0;
|
||||
out3:
|
||||
outw(PP_ChipID, dev->base_addr + ADD_PORT);
|
||||
out2:
|
||||
release_region(ioaddr & ~3, NETCARD_IO_EXTENT);
|
||||
out1:
|
||||
|
@ -1831,13 +1831,6 @@ init_module(void)
|
|||
if (ret)
|
||||
goto out;
|
||||
|
||||
if (register_netdev(dev) != 0) {
|
||||
printk(KERN_ERR "cs89x0.c: No card found at 0x%x\n", io);
|
||||
ret = -ENXIO;
|
||||
outw(PP_ChipID, dev->base_addr + ADD_PORT);
|
||||
release_region(dev->base_addr, NETCARD_IO_EXTENT);
|
||||
goto out;
|
||||
}
|
||||
dev_cs89x0 = dev;
|
||||
return 0;
|
||||
out:
|
||||
|
|
|
@ -162,12 +162,7 @@ struct net_device * __init e2100_probe(int unit)
|
|||
err = do_e2100_probe(dev);
|
||||
if (err)
|
||||
goto out;
|
||||
err = register_netdev(dev);
|
||||
if (err)
|
||||
goto out1;
|
||||
return dev;
|
||||
out1:
|
||||
cleanup_card(dev);
|
||||
out:
|
||||
free_netdev(dev);
|
||||
return ERR_PTR(err);
|
||||
|
@ -286,6 +281,9 @@ static int __init e21_probe1(struct net_device *dev, int ioaddr)
|
|||
#endif
|
||||
NS8390_init(dev, 0);
|
||||
|
||||
retval = register_netdev(dev);
|
||||
if (retval)
|
||||
goto out;
|
||||
return 0;
|
||||
out:
|
||||
release_region(ioaddr, E21_IO_EXTENT);
|
||||
|
@ -453,11 +451,8 @@ init_module(void)
|
|||
dev->mem_start = mem[this_dev];
|
||||
dev->mem_end = xcvr[this_dev]; /* low 4bits = xcvr sel. */
|
||||
if (do_e2100_probe(dev) == 0) {
|
||||
if (register_netdev(dev) == 0) {
|
||||
dev_e21[found++] = dev;
|
||||
continue;
|
||||
}
|
||||
cleanup_card(dev);
|
||||
dev_e21[found++] = dev;
|
||||
continue;
|
||||
}
|
||||
free_netdev(dev);
|
||||
printk(KERN_WARNING "e2100.c: No E2100 card found (i/o = 0x%x).\n", io[this_dev]);
|
||||
|
|
|
@ -600,12 +600,7 @@ struct net_device * __init eepro_probe(int unit)
|
|||
err = do_eepro_probe(dev);
|
||||
if (err)
|
||||
goto out;
|
||||
err = register_netdev(dev);
|
||||
if (err)
|
||||
goto out1;
|
||||
return dev;
|
||||
out1:
|
||||
release_region(dev->base_addr, EEPRO_IO_EXTENT);
|
||||
out:
|
||||
free_netdev(dev);
|
||||
return ERR_PTR(err);
|
||||
|
@ -758,6 +753,7 @@ static int __init eepro_probe1(struct net_device *dev, int autoprobe)
|
|||
int i;
|
||||
struct eepro_local *lp;
|
||||
int ioaddr = dev->base_addr;
|
||||
int err;
|
||||
|
||||
/* Grab the region so we can find another board if autoIRQ fails. */
|
||||
if (!request_region(ioaddr, EEPRO_IO_EXTENT, DRV_NAME)) {
|
||||
|
@ -873,10 +869,16 @@ static int __init eepro_probe1(struct net_device *dev, int autoprobe)
|
|||
|
||||
/* reset 82595 */
|
||||
eepro_reset(ioaddr);
|
||||
|
||||
err = register_netdev(dev);
|
||||
if (err)
|
||||
goto err;
|
||||
return 0;
|
||||
exit:
|
||||
err = -ENODEV;
|
||||
err:
|
||||
release_region(dev->base_addr, EEPRO_IO_EXTENT);
|
||||
return -ENODEV;
|
||||
return err;
|
||||
}
|
||||
|
||||
/* Open/initialize the board. This is called (in the current kernel)
|
||||
|
@ -1834,11 +1836,8 @@ init_module(void)
|
|||
dev->irq = irq[i];
|
||||
|
||||
if (do_eepro_probe(dev) == 0) {
|
||||
if (register_netdev(dev) == 0) {
|
||||
dev_eepro[n_eepro++] = dev;
|
||||
continue;
|
||||
}
|
||||
release_region(dev->base_addr, EEPRO_IO_EXTENT);
|
||||
dev_eepro[n_eepro++] = dev;
|
||||
continue;
|
||||
}
|
||||
free_netdev(dev);
|
||||
break;
|
||||
|
|
|
@ -436,11 +436,8 @@ struct net_device * __init express_probe(int unit)
|
|||
netdev_boot_setup_check(dev);
|
||||
|
||||
err = do_express_probe(dev);
|
||||
if (!err) {
|
||||
err = register_netdev(dev);
|
||||
if (!err)
|
||||
return dev;
|
||||
}
|
||||
if (!err)
|
||||
return dev;
|
||||
free_netdev(dev);
|
||||
return ERR_PTR(err);
|
||||
}
|
||||
|
@ -1205,7 +1202,8 @@ static int __init eexp_hw_probe(struct net_device *dev, unsigned short ioaddr)
|
|||
dev->set_multicast_list = &eexp_set_multicast;
|
||||
dev->tx_timeout = eexp_timeout;
|
||||
dev->watchdog_timeo = 2*HZ;
|
||||
return 0;
|
||||
|
||||
return register_netdev(dev);
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -1716,7 +1714,7 @@ int init_module(void)
|
|||
break;
|
||||
printk(KERN_NOTICE "eexpress.c: Module autoprobe not recommended, give io=xx.\n");
|
||||
}
|
||||
if (do_express_probe(dev) == 0 && register_netdev(dev) == 0) {
|
||||
if (do_express_probe(dev) == 0) {
|
||||
dev_eexp[this_dev] = dev;
|
||||
found++;
|
||||
continue;
|
||||
|
|
|
@ -177,12 +177,7 @@ struct net_device * __init es_probe(int unit)
|
|||
err = do_es_probe(dev);
|
||||
if (err)
|
||||
goto out;
|
||||
err = register_netdev(dev);
|
||||
if (err)
|
||||
goto out1;
|
||||
return dev;
|
||||
out1:
|
||||
cleanup_card(dev);
|
||||
out:
|
||||
free_netdev(dev);
|
||||
return ERR_PTR(err);
|
||||
|
@ -310,6 +305,10 @@ static int __init es_probe1(struct net_device *dev, int ioaddr)
|
|||
dev->poll_controller = ei_poll;
|
||||
#endif
|
||||
NS8390_init(dev, 0);
|
||||
|
||||
retval = register_netdev(dev);
|
||||
if (retval)
|
||||
goto out1;
|
||||
return 0;
|
||||
out1:
|
||||
free_irq(dev->irq, dev);
|
||||
|
@ -445,11 +444,8 @@ init_module(void)
|
|||
dev->base_addr = io[this_dev];
|
||||
dev->mem_start = mem[this_dev];
|
||||
if (do_es_probe(dev) == 0) {
|
||||
if (register_netdev(dev) == 0) {
|
||||
dev_es3210[found++] = dev;
|
||||
continue;
|
||||
}
|
||||
cleanup_card(dev);
|
||||
dev_es3210[found++] = dev;
|
||||
continue;
|
||||
}
|
||||
free_netdev(dev);
|
||||
printk(KERN_WARNING "es3210.c: No es3210 card found (i/o = 0x%x).\n", io[this_dev]);
|
||||
|
|
|
@ -473,13 +473,7 @@ struct net_device * __init eth16i_probe(int unit)
|
|||
err = do_eth16i_probe(dev);
|
||||
if (err)
|
||||
goto out;
|
||||
err = register_netdev(dev);
|
||||
if (err)
|
||||
goto out1;
|
||||
return dev;
|
||||
out1:
|
||||
free_irq(dev->irq, dev);
|
||||
release_region(dev->base_addr, ETH16I_IO_EXTENT);
|
||||
out:
|
||||
free_netdev(dev);
|
||||
return ERR_PTR(err);
|
||||
|
@ -569,7 +563,13 @@ static int __init eth16i_probe1(struct net_device *dev, int ioaddr)
|
|||
dev->tx_timeout = eth16i_timeout;
|
||||
dev->watchdog_timeo = TX_TIMEOUT;
|
||||
spin_lock_init(&lp->lock);
|
||||
|
||||
retval = register_netdev(dev);
|
||||
if (retval)
|
||||
goto out1;
|
||||
return 0;
|
||||
out1:
|
||||
free_irq(dev->irq, dev);
|
||||
out:
|
||||
release_region(ioaddr, ETH16I_IO_EXTENT);
|
||||
return retval;
|
||||
|
@ -1462,12 +1462,8 @@ int init_module(void)
|
|||
}
|
||||
|
||||
if (do_eth16i_probe(dev) == 0) {
|
||||
if (register_netdev(dev) == 0) {
|
||||
dev_eth16i[found++] = dev;
|
||||
continue;
|
||||
}
|
||||
free_irq(dev->irq, dev);
|
||||
release_region(dev->base_addr, ETH16I_IO_EXTENT);
|
||||
dev_eth16i[found++] = dev;
|
||||
continue;
|
||||
}
|
||||
printk(KERN_WARNING "eth16i.c No Eth16i card found (i/o = 0x%x).\n",
|
||||
io[this_dev]);
|
||||
|
|
|
@ -159,12 +159,7 @@ struct net_device * __init hp_plus_probe(int unit)
|
|||
err = do_hpp_probe(dev);
|
||||
if (err)
|
||||
goto out;
|
||||
err = register_netdev(dev);
|
||||
if (err)
|
||||
goto out1;
|
||||
return dev;
|
||||
out1:
|
||||
cleanup_card(dev);
|
||||
out:
|
||||
free_netdev(dev);
|
||||
return ERR_PTR(err);
|
||||
|
@ -271,6 +266,9 @@ static int __init hpp_probe1(struct net_device *dev, int ioaddr)
|
|||
/* Leave the 8390 and HP chip reset. */
|
||||
outw(inw(ioaddr + HPP_OPTION) & ~EnableIRQ, ioaddr + HPP_OPTION);
|
||||
|
||||
retval = register_netdev(dev);
|
||||
if (retval)
|
||||
goto out;
|
||||
return 0;
|
||||
out:
|
||||
release_region(ioaddr, HP_IO_EXTENT);
|
||||
|
@ -463,11 +461,8 @@ init_module(void)
|
|||
dev->irq = irq[this_dev];
|
||||
dev->base_addr = io[this_dev];
|
||||
if (do_hpp_probe(dev) == 0) {
|
||||
if (register_netdev(dev) == 0) {
|
||||
dev_hpp[found++] = dev;
|
||||
continue;
|
||||
}
|
||||
cleanup_card(dev);
|
||||
dev_hpp[found++] = dev;
|
||||
continue;
|
||||
}
|
||||
free_netdev(dev);
|
||||
printk(KERN_WARNING "hp-plus.c: No HP-Plus card found (i/o = 0x%x).\n", io[this_dev]);
|
||||
|
|
|
@ -123,12 +123,7 @@ struct net_device * __init hp_probe(int unit)
|
|||
err = do_hp_probe(dev);
|
||||
if (err)
|
||||
goto out;
|
||||
err = register_netdev(dev);
|
||||
if (err)
|
||||
goto out1;
|
||||
return dev;
|
||||
out1:
|
||||
cleanup_card(dev);
|
||||
out:
|
||||
free_netdev(dev);
|
||||
return ERR_PTR(err);
|
||||
|
@ -227,7 +222,12 @@ static int __init hp_probe1(struct net_device *dev, int ioaddr)
|
|||
ei_status.block_output = &hp_block_output;
|
||||
hp_init_card(dev);
|
||||
|
||||
retval = register_netdev(dev);
|
||||
if (retval)
|
||||
goto out1;
|
||||
return 0;
|
||||
out1:
|
||||
free_irq(dev->irq, dev);
|
||||
out:
|
||||
release_region(ioaddr, HP_IO_EXTENT);
|
||||
return retval;
|
||||
|
@ -432,11 +432,8 @@ init_module(void)
|
|||
dev->irq = irq[this_dev];
|
||||
dev->base_addr = io[this_dev];
|
||||
if (do_hp_probe(dev) == 0) {
|
||||
if (register_netdev(dev) == 0) {
|
||||
dev_hp[found++] = dev;
|
||||
continue;
|
||||
}
|
||||
cleanup_card(dev);
|
||||
dev_hp[found++] = dev;
|
||||
continue;
|
||||
}
|
||||
free_netdev(dev);
|
||||
printk(KERN_WARNING "hp.c: No HP card found (i/o = 0x%x).\n", io[this_dev]);
|
||||
|
|
|
@ -417,12 +417,7 @@ struct net_device * __init hp100_probe(int unit)
|
|||
if (err)
|
||||
goto out;
|
||||
|
||||
err = register_netdev(dev);
|
||||
if (err)
|
||||
goto out1;
|
||||
return dev;
|
||||
out1:
|
||||
release_region(dev->base_addr, HP100_REGION_SIZE);
|
||||
out:
|
||||
free_netdev(dev);
|
||||
return ERR_PTR(err);
|
||||
|
@ -776,11 +771,22 @@ static int __devinit hp100_probe1(struct net_device *dev, int ioaddr,
|
|||
printk("Warning! Link down.\n");
|
||||
}
|
||||
|
||||
err = register_netdev(dev);
|
||||
if (err)
|
||||
goto out3;
|
||||
|
||||
return 0;
|
||||
out3:
|
||||
if (local_mode == 1)
|
||||
pci_free_consistent(lp->pci_dev, MAX_RINGSIZE + 0x0f,
|
||||
lp->page_vaddr_algn,
|
||||
virt_to_whatever(dev, lp->page_vaddr_algn));
|
||||
if (mem_ptr_virt)
|
||||
iounmap(mem_ptr_virt);
|
||||
out2:
|
||||
release_region(ioaddr, HP100_REGION_SIZE);
|
||||
out1:
|
||||
return -ENODEV;
|
||||
return err;
|
||||
}
|
||||
|
||||
/* This procedure puts the card into a stable init state */
|
||||
|
@ -2875,18 +2881,12 @@ static int __init hp100_eisa_probe (struct device *gendev)
|
|||
if (err)
|
||||
goto out1;
|
||||
|
||||
err = register_netdev(dev);
|
||||
if (err)
|
||||
goto out2;
|
||||
|
||||
#ifdef HP100_DEBUG
|
||||
printk("hp100: %s: EISA adapter found at 0x%x\n", dev->name,
|
||||
dev->base_addr);
|
||||
#endif
|
||||
gendev->driver_data = dev;
|
||||
return 0;
|
||||
out2:
|
||||
release_region(dev->base_addr, HP100_REGION_SIZE);
|
||||
out1:
|
||||
free_netdev(dev);
|
||||
return err;
|
||||
|
@ -2951,17 +2951,12 @@ static int __devinit hp100_pci_probe (struct pci_dev *pdev,
|
|||
err = hp100_probe1(dev, ioaddr, HP100_BUS_PCI, pdev);
|
||||
if (err)
|
||||
goto out1;
|
||||
err = register_netdev(dev);
|
||||
if (err)
|
||||
goto out2;
|
||||
|
||||
#ifdef HP100_DEBUG
|
||||
printk("hp100: %s: PCI adapter found at 0x%x\n", dev->name, ioaddr);
|
||||
#endif
|
||||
pci_set_drvdata(pdev, dev);
|
||||
return 0;
|
||||
out2:
|
||||
release_region(dev->base_addr, HP100_REGION_SIZE);
|
||||
out1:
|
||||
free_netdev(dev);
|
||||
out0:
|
||||
|
@ -3032,15 +3027,9 @@ static int __init hp100_isa_init(void)
|
|||
SET_MODULE_OWNER(dev);
|
||||
|
||||
err = hp100_isa_probe(dev, hp100_port[i]);
|
||||
if (!err) {
|
||||
err = register_netdev(dev);
|
||||
if (!err)
|
||||
hp100_devlist[cards++] = dev;
|
||||
else
|
||||
release_region(dev->base_addr, HP100_REGION_SIZE);
|
||||
}
|
||||
|
||||
if (err)
|
||||
if (!err)
|
||||
hp100_devlist[cards++] = dev;
|
||||
else
|
||||
free_netdev(dev);
|
||||
}
|
||||
|
||||
|
|
|
@ -176,12 +176,7 @@ struct net_device * __init netcard_probe(int unit)
|
|||
err = do_netcard_probe(dev);
|
||||
if (err)
|
||||
goto out;
|
||||
err = register_netdev(dev);
|
||||
if (err)
|
||||
goto out1;
|
||||
return dev;
|
||||
out1:
|
||||
cleanup_card(dev);
|
||||
out:
|
||||
free_netdev(dev);
|
||||
return ERR_PTR(err);
|
||||
|
@ -316,7 +311,15 @@ static int __init netcard_probe1(struct net_device *dev, int ioaddr)
|
|||
|
||||
dev->tx_timeout = &net_tx_timeout;
|
||||
dev->watchdog_timeo = MY_TX_TIMEOUT;
|
||||
|
||||
err = register_netdev(dev);
|
||||
if (err)
|
||||
goto out2;
|
||||
return 0;
|
||||
out2:
|
||||
#ifdef jumpered_dma
|
||||
free_dma(dev->dma);
|
||||
#endif
|
||||
out1:
|
||||
#ifdef jumpered_interrupts
|
||||
free_irq(dev->irq, dev);
|
||||
|
@ -691,11 +694,8 @@ int init_module(void)
|
|||
dev->dma = dma;
|
||||
dev->mem_start = mem;
|
||||
if (do_netcard_probe(dev) == 0) {
|
||||
if (register_netdev(dev) == 0)
|
||||
this_device = dev;
|
||||
return 0;
|
||||
}
|
||||
cleanup_card(dev);
|
||||
this_device = dev;
|
||||
return 0;
|
||||
}
|
||||
free_netdev(dev);
|
||||
return -ENXIO;
|
||||
|
|
|
@ -356,11 +356,8 @@ int init_module(void)
|
|||
dev->base_addr = io[this_dev];
|
||||
dev->dma = dma[this_dev];
|
||||
if (do_lance_probe(dev) == 0) {
|
||||
if (register_netdev(dev) == 0) {
|
||||
dev_lance[found++] = dev;
|
||||
continue;
|
||||
}
|
||||
cleanup_card(dev);
|
||||
dev_lance[found++] = dev;
|
||||
continue;
|
||||
}
|
||||
free_netdev(dev);
|
||||
break;
|
||||
|
@ -448,12 +445,7 @@ struct net_device * __init lance_probe(int unit)
|
|||
err = do_lance_probe(dev);
|
||||
if (err)
|
||||
goto out;
|
||||
err = register_netdev(dev);
|
||||
if (err)
|
||||
goto out1;
|
||||
return dev;
|
||||
out1:
|
||||
cleanup_card(dev);
|
||||
out:
|
||||
free_netdev(dev);
|
||||
return ERR_PTR(err);
|
||||
|
@ -724,6 +716,9 @@ static int __init lance_probe1(struct net_device *dev, int ioaddr, int irq, int
|
|||
dev->tx_timeout = lance_tx_timeout;
|
||||
dev->watchdog_timeo = TX_TIMEOUT;
|
||||
|
||||
err = register_netdev(dev);
|
||||
if (err)
|
||||
goto out_dma;
|
||||
return 0;
|
||||
out_dma:
|
||||
if (dev->dma != 4)
|
||||
|
|
|
@ -167,12 +167,7 @@ struct net_device * __init lne390_probe(int unit)
|
|||
err = do_lne390_probe(dev);
|
||||
if (err)
|
||||
goto out;
|
||||
err = register_netdev(dev);
|
||||
if (err)
|
||||
goto out1;
|
||||
return dev;
|
||||
out1:
|
||||
cleanup_card(dev);
|
||||
out:
|
||||
free_netdev(dev);
|
||||
return ERR_PTR(err);
|
||||
|
@ -296,7 +291,14 @@ static int __init lne390_probe1(struct net_device *dev, int ioaddr)
|
|||
dev->poll_controller = ei_poll;
|
||||
#endif
|
||||
NS8390_init(dev, 0);
|
||||
|
||||
ret = register_netdev(dev);
|
||||
if (ret)
|
||||
goto unmap;
|
||||
return 0;
|
||||
unmap:
|
||||
if (ei_status.reg0)
|
||||
iounmap((void *)dev->mem_start);
|
||||
cleanup:
|
||||
free_irq(dev->irq, dev);
|
||||
return ret;
|
||||
|
@ -426,11 +428,8 @@ int init_module(void)
|
|||
dev->base_addr = io[this_dev];
|
||||
dev->mem_start = mem[this_dev];
|
||||
if (do_lne390_probe(dev) == 0) {
|
||||
if (register_netdev(dev) == 0) {
|
||||
dev_lne[found++] = dev;
|
||||
continue;
|
||||
}
|
||||
cleanup_card(dev);
|
||||
dev_lne[found++] = dev;
|
||||
continue;
|
||||
}
|
||||
free_netdev(dev);
|
||||
printk(KERN_WARNING "lne390.c: No LNE390 card found (i/o = 0x%x).\n", io[this_dev]);
|
||||
|
|
|
@ -180,12 +180,7 @@ struct net_device * __init ne_probe(int unit)
|
|||
err = do_ne_probe(dev);
|
||||
if (err)
|
||||
goto out;
|
||||
err = register_netdev(dev);
|
||||
if (err)
|
||||
goto out1;
|
||||
return dev;
|
||||
out1:
|
||||
cleanup_card(dev);
|
||||
out:
|
||||
free_netdev(dev);
|
||||
return ERR_PTR(err);
|
||||
|
@ -325,8 +320,13 @@ static int __init ne_probe1(struct net_device *dev, int ioaddr)
|
|||
dev->poll_controller = ei_poll;
|
||||
#endif
|
||||
NS8390_init(dev, 0);
|
||||
return 0;
|
||||
|
||||
ret = register_netdev(dev);
|
||||
if (ret)
|
||||
goto out_irq;
|
||||
return 0;
|
||||
out_irq:
|
||||
free_irq(dev->irq, dev);
|
||||
err_out:
|
||||
release_region(ioaddr, NE_IO_EXTENT);
|
||||
return ret;
|
||||
|
@ -633,11 +633,8 @@ int init_module(void)
|
|||
err = init_reg_offset(dev, dev->base_addr);
|
||||
if (!err) {
|
||||
if (do_ne_probe(dev) == 0) {
|
||||
if (register_netdev(dev) == 0) {
|
||||
dev_ne[found++] = dev;
|
||||
continue;
|
||||
}
|
||||
cleanup_card(dev);
|
||||
dev_ne[found++] = dev;
|
||||
continue;
|
||||
}
|
||||
}
|
||||
free_netdev(dev);
|
||||
|
|
|
@ -229,12 +229,7 @@ struct net_device * __init ne_probe(int unit)
|
|||
err = do_ne_probe(dev);
|
||||
if (err)
|
||||
goto out;
|
||||
err = register_netdev(dev);
|
||||
if (err)
|
||||
goto out1;
|
||||
return dev;
|
||||
out1:
|
||||
cleanup_card(dev);
|
||||
out:
|
||||
free_netdev(dev);
|
||||
return ERR_PTR(err);
|
||||
|
@ -534,8 +529,14 @@ static int __init ne_probe1(struct net_device *dev, int ioaddr)
|
|||
dev->poll_controller = ei_poll;
|
||||
#endif
|
||||
NS8390_init(dev, 0);
|
||||
|
||||
ret = register_netdev(dev);
|
||||
if (ret)
|
||||
goto out_irq;
|
||||
return 0;
|
||||
|
||||
out_irq:
|
||||
free_irq(dev->irq, dev);
|
||||
err_out:
|
||||
release_region(ioaddr, NE_IO_EXTENT);
|
||||
return ret;
|
||||
|
@ -826,11 +827,8 @@ int init_module(void)
|
|||
dev->mem_end = bad[this_dev];
|
||||
dev->base_addr = io[this_dev];
|
||||
if (do_ne_probe(dev) == 0) {
|
||||
if (register_netdev(dev) == 0) {
|
||||
dev_ne[found++] = dev;
|
||||
continue;
|
||||
}
|
||||
cleanup_card(dev);
|
||||
dev_ne[found++] = dev;
|
||||
continue;
|
||||
}
|
||||
free_netdev(dev);
|
||||
if (found)
|
||||
|
|
|
@ -301,12 +301,7 @@ struct net_device * __init ne2_probe(int unit)
|
|||
err = do_ne2_probe(dev);
|
||||
if (err)
|
||||
goto out;
|
||||
err = register_netdev(dev);
|
||||
if (err)
|
||||
goto out1;
|
||||
return dev;
|
||||
out1:
|
||||
cleanup_card(dev);
|
||||
out:
|
||||
free_netdev(dev);
|
||||
return ERR_PTR(err);
|
||||
|
@ -517,7 +512,14 @@ static int __init ne2_probe1(struct net_device *dev, int slot)
|
|||
dev->poll_controller = ei_poll;
|
||||
#endif
|
||||
NS8390_init(dev, 0);
|
||||
|
||||
retval = register_netdev(dev);
|
||||
if (retval)
|
||||
goto out1;
|
||||
return 0;
|
||||
out1:
|
||||
mca_set_adapter_procfn( ei_status.priv, NULL, NULL);
|
||||
free_irq(dev->irq, dev);
|
||||
out:
|
||||
release_region(base_addr, NE_IO_EXTENT);
|
||||
return retval;
|
||||
|
@ -798,11 +800,8 @@ int init_module(void)
|
|||
dev->mem_end = bad[this_dev];
|
||||
dev->base_addr = io[this_dev];
|
||||
if (do_ne2_probe(dev) == 0) {
|
||||
if (register_netdev(dev) == 0) {
|
||||
dev_ne[found++] = dev;
|
||||
continue;
|
||||
}
|
||||
cleanup_card(dev);
|
||||
dev_ne[found++] = dev;
|
||||
continue;
|
||||
}
|
||||
free_netdev(dev);
|
||||
break;
|
||||
|
|
|
@ -194,12 +194,7 @@ struct net_device * __init ultra_probe(int unit)
|
|||
err = do_ultra_probe(dev);
|
||||
if (err)
|
||||
goto out;
|
||||
err = register_netdev(dev);
|
||||
if (err)
|
||||
goto out1;
|
||||
return dev;
|
||||
out1:
|
||||
cleanup_card(dev);
|
||||
out:
|
||||
free_netdev(dev);
|
||||
return ERR_PTR(err);
|
||||
|
@ -325,6 +320,9 @@ static int __init ultra_probe1(struct net_device *dev, int ioaddr)
|
|||
#endif
|
||||
NS8390_init(dev, 0);
|
||||
|
||||
retval = register_netdev(dev);
|
||||
if (retval)
|
||||
goto out;
|
||||
return 0;
|
||||
out:
|
||||
release_region(ioaddr, ULTRA_IO_EXTENT);
|
||||
|
@ -583,11 +581,8 @@ init_module(void)
|
|||
dev->irq = irq[this_dev];
|
||||
dev->base_addr = io[this_dev];
|
||||
if (do_ultra_probe(dev) == 0) {
|
||||
if (register_netdev(dev) == 0) {
|
||||
dev_ultra[found++] = dev;
|
||||
continue;
|
||||
}
|
||||
cleanup_card(dev);
|
||||
dev_ultra[found++] = dev;
|
||||
continue;
|
||||
}
|
||||
free_netdev(dev);
|
||||
printk(KERN_WARNING "smc-ultra.c: No SMC Ultra card found (i/o = 0x%x).\n", io[this_dev]);
|
||||
|
|
|
@ -149,12 +149,7 @@ struct net_device * __init wd_probe(int unit)
|
|||
err = do_wd_probe(dev);
|
||||
if (err)
|
||||
goto out;
|
||||
err = register_netdev(dev);
|
||||
if (err)
|
||||
goto out1;
|
||||
return dev;
|
||||
out1:
|
||||
cleanup_card(dev);
|
||||
out:
|
||||
free_netdev(dev);
|
||||
return ERR_PTR(err);
|
||||
|
@ -164,6 +159,7 @@ struct net_device * __init wd_probe(int unit)
|
|||
static int __init wd_probe1(struct net_device *dev, int ioaddr)
|
||||
{
|
||||
int i;
|
||||
int err;
|
||||
int checksum = 0;
|
||||
int ancient = 0; /* An old card without config registers. */
|
||||
int word16 = 0; /* 0 = 8 bit, 1 = 16 bit */
|
||||
|
@ -356,7 +352,10 @@ static int __init wd_probe1(struct net_device *dev, int ioaddr)
|
|||
outb(inb(ioaddr+4)|0x80, ioaddr+4);
|
||||
#endif
|
||||
|
||||
return 0;
|
||||
err = register_netdev(dev);
|
||||
if (err)
|
||||
free_irq(dev->irq, dev);
|
||||
return err;
|
||||
}
|
||||
|
||||
static int
|
||||
|
@ -527,11 +526,8 @@ init_module(void)
|
|||
dev->mem_start = mem[this_dev];
|
||||
dev->mem_end = mem_end[this_dev];
|
||||
if (do_wd_probe(dev) == 0) {
|
||||
if (register_netdev(dev) == 0) {
|
||||
dev_wd[found++] = dev;
|
||||
continue;
|
||||
}
|
||||
cleanup_card(dev);
|
||||
dev_wd[found++] = dev;
|
||||
continue;
|
||||
}
|
||||
free_netdev(dev);
|
||||
printk(KERN_WARNING "wd.c: No wd80x3 card found (i/o = 0x%x).\n", io[this_dev]);
|
||||
|
|
Loading…
Reference in a new issue