diff options
author | <herbert@gondor.apana.org.au> | 2005-05-12 20:11:55 -0400 |
---|---|---|
committer | Jeff Garzik <jgarzik@pobox.com> | 2005-05-12 20:11:55 -0400 |
commit | b1fc5505e0dbcc3fd7c75bfe6bee39ec50080963 (patch) | |
tree | f8c0bb679dc8e72816e16820c3dbcccf924097eb /drivers/net/smc-ultra.c | |
parent | 88d7bd8cb9eb8d64bf7997600b0d64f7834047c5 (diff) |
[netdrvr] Fix register_netdev() races in older ISA net drivers
Diffstat (limited to 'drivers/net/smc-ultra.c')
-rw-r--r-- | drivers/net/smc-ultra.c | 15 |
1 files changed, 5 insertions, 10 deletions
diff --git a/drivers/net/smc-ultra.c b/drivers/net/smc-ultra.c index b564c677c6d2..6d9dae60a697 100644 --- a/drivers/net/smc-ultra.c +++ b/drivers/net/smc-ultra.c | |||
@@ -194,12 +194,7 @@ struct net_device * __init ultra_probe(int unit) | |||
194 | err = do_ultra_probe(dev); | 194 | err = do_ultra_probe(dev); |
195 | if (err) | 195 | if (err) |
196 | goto out; | 196 | goto out; |
197 | err = register_netdev(dev); | ||
198 | if (err) | ||
199 | goto out1; | ||
200 | return dev; | 197 | return dev; |
201 | out1: | ||
202 | cleanup_card(dev); | ||
203 | out: | 198 | out: |
204 | free_netdev(dev); | 199 | free_netdev(dev); |
205 | return ERR_PTR(err); | 200 | return ERR_PTR(err); |
@@ -325,6 +320,9 @@ static int __init ultra_probe1(struct net_device *dev, int ioaddr) | |||
325 | #endif | 320 | #endif |
326 | NS8390_init(dev, 0); | 321 | NS8390_init(dev, 0); |
327 | 322 | ||
323 | retval = register_netdev(dev); | ||
324 | if (retval) | ||
325 | goto out; | ||
328 | return 0; | 326 | return 0; |
329 | out: | 327 | out: |
330 | release_region(ioaddr, ULTRA_IO_EXTENT); | 328 | release_region(ioaddr, ULTRA_IO_EXTENT); |
@@ -583,11 +581,8 @@ init_module(void) | |||
583 | dev->irq = irq[this_dev]; | 581 | dev->irq = irq[this_dev]; |
584 | dev->base_addr = io[this_dev]; | 582 | dev->base_addr = io[this_dev]; |
585 | if (do_ultra_probe(dev) == 0) { | 583 | if (do_ultra_probe(dev) == 0) { |
586 | if (register_netdev(dev) == 0) { | 584 | dev_ultra[found++] = dev; |
587 | dev_ultra[found++] = dev; | 585 | continue; |
588 | continue; | ||
589 | } | ||
590 | cleanup_card(dev); | ||
591 | } | 586 | } |
592 | free_netdev(dev); | 587 | free_netdev(dev); |
593 | printk(KERN_WARNING "smc-ultra.c: No SMC Ultra card found (i/o = 0x%x).\n", io[this_dev]); | 588 | printk(KERN_WARNING "smc-ultra.c: No SMC Ultra card found (i/o = 0x%x).\n", io[this_dev]); |