ramips: add error-path handling to the ramips_eth_plat_probe
authorGabor Juhos <juhosg@openwrt.org>
Mon, 26 Oct 2009 17:17:13 +0000 (17:17 +0000)
committerGabor Juhos <juhosg@openwrt.org>
Mon, 26 Oct 2009 17:17:13 +0000 (17:17 +0000)
SVN-Revision: 18165

target/linux/ramips/files/drivers/net/ramips.c

index d3337da2008ede6f403f1dbfb98f515406255d65..ae47230b7cb687411ff66ff6415150112a97f97a 100644 (file)
@@ -338,12 +338,24 @@ ramips_eth_plat_probe(struct platform_device *plat)
 {
        struct raeth_priv *priv;
        struct ramips_eth_platform_data *data = plat->dev.platform_data;
+       int err;
+
+       if (!data) {
+               dev_err(&plat->dev, "no platform data specified\n");
+               return -EINVAL;
+       }
+
        ramips_fe_base = ioremap_nocache(data->base_addr, PAGE_SIZE);
        if(!ramips_fe_base)
                return -ENOMEM;
+
        ramips_dev = alloc_etherdev(sizeof(struct raeth_priv));
-       if(!ramips_dev)
-               return -ENOMEM;
+       if(!ramips_dev) {
+               dev_err(&plat->dev, "alloc_etherdev failed\n");
+               err = -ENOMEM;
+               goto err_unmap;
+       }
+
        strcpy(ramips_dev->name, "eth%d");
        ramips_dev->irq = data->irq;
        ramips_dev->addr_len = ETH_ALEN;
@@ -351,16 +363,24 @@ ramips_eth_plat_probe(struct platform_device *plat)
        ramips_dev->init = ramips_eth_probe;
        priv = (struct raeth_priv*)netdev_priv(ramips_dev);
        priv->plat = data;
-       if(register_netdev(ramips_dev))
-       {
-               printk(KERN_ERR "ramips_eth: error bringing up device\n");
-               return -ENXIO;
+
+       err = register_netdev(ramips_dev);
+       if (err) {
+               dev_err(&plat->dev, "error bringing up device\n");
+               goto err_free_dev;
        }
+
 #ifdef CONFIG_RALINK_RT305X
        rt305x_esw_init();
 #endif
        printk(KERN_DEBUG "ramips_eth: loaded\n");
        return 0;
+
+ err_free_dev:
+       kfree(ramips_dev);
+ err_unmap:
+       iounmap(ramips_fe_base);
+       return err;
 }
 
 static int