From 90e4aa23860529f06083d0013f662f27ae006660 Mon Sep 17 00:00:00 2001 From: juhosg Date: Mon, 26 Oct 2009 17:17:13 +0000 Subject: ramips: add error-path handling to the ramips_eth_plat_probe git-svn-id: svn://svn.openwrt.org/openwrt/trunk@18165 3c298f89-4303-0410-b956-a3cf2f4a3e73 --- target/linux/ramips/files/drivers/net/ramips.c | 32 +++++++++++++++++++++----- 1 file changed, 26 insertions(+), 6 deletions(-) (limited to 'target/linux/ramips') diff --git a/target/linux/ramips/files/drivers/net/ramips.c b/target/linux/ramips/files/drivers/net/ramips.c index d3337da20..ae47230b7 100644 --- a/target/linux/ramips/files/drivers/net/ramips.c +++ b/target/linux/ramips/files/drivers/net/ramips.c @@ -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 -- cgit v1.2.3