summaryrefslogtreecommitdiff
path: root/drivers/net/cs89x0.c
diff options
context:
space:
mode:
author <herbert@gondor.apana.org.au>2005-05-12 20:11:55 -0400
committerJeff Garzik <jgarzik@pobox.com>2005-05-12 20:11:55 -0400
commitb1fc5505e0dbcc3fd7c75bfe6bee39ec50080963 (patch)
treef8c0bb679dc8e72816e16820c3dbcccf924097eb /drivers/net/cs89x0.c
parent88d7bd8cb9eb8d64bf7997600b0d64f7834047c5 (diff)
downloadlwn-b1fc5505e0dbcc3fd7c75bfe6bee39ec50080963.tar.gz
lwn-b1fc5505e0dbcc3fd7c75bfe6bee39ec50080963.zip
[netdrvr] Fix register_netdev() races in older ISA net drivers
Diffstat (limited to 'drivers/net/cs89x0.c')
-rw-r--r--drivers/net/cs89x0.c19
1 files changed, 6 insertions, 13 deletions
diff --git a/drivers/net/cs89x0.c b/drivers/net/cs89x0.c
index 5c5f540da26a..25e4495de79e 100644
--- a/drivers/net/cs89x0.c
+++ b/drivers/net/cs89x0.c
@@ -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: