diff options
Diffstat (limited to 'drivers/uio/uio_pdrv_genirq.c')
| -rw-r--r-- | drivers/uio/uio_pdrv_genirq.c | 34 | 
1 files changed, 10 insertions, 24 deletions
diff --git a/drivers/uio/uio_pdrv_genirq.c b/drivers/uio/uio_pdrv_genirq.c index 90ff17a0202..76669313e9a 100644 --- a/drivers/uio/uio_pdrv_genirq.c +++ b/drivers/uio/uio_pdrv_genirq.c @@ -112,11 +112,11 @@ static int uio_pdrv_genirq_probe(struct platform_device *pdev)  	if (pdev->dev.of_node) {  		/* alloc uioinfo for one device */ -		uioinfo = kzalloc(sizeof(*uioinfo), GFP_KERNEL); +		uioinfo = devm_kzalloc(&pdev->dev, sizeof(*uioinfo), +				       GFP_KERNEL);  		if (!uioinfo) { -			ret = -ENOMEM;  			dev_err(&pdev->dev, "unable to kmalloc\n"); -			return ret; +			return -ENOMEM;  		}  		uioinfo->name = pdev->dev.of_node->name;  		uioinfo->version = "devicetree"; @@ -125,20 +125,19 @@ static int uio_pdrv_genirq_probe(struct platform_device *pdev)  	if (!uioinfo || !uioinfo->name || !uioinfo->version) {  		dev_err(&pdev->dev, "missing platform_data\n"); -		goto bad0; +		return ret;  	}  	if (uioinfo->handler || uioinfo->irqcontrol ||  	    uioinfo->irq_flags & IRQF_SHARED) {  		dev_err(&pdev->dev, "interrupt configuration error\n"); -		goto bad0; +		return ret;  	} -	priv = kzalloc(sizeof(*priv), GFP_KERNEL); +	priv = devm_kzalloc(&pdev->dev, sizeof(*priv), GFP_KERNEL);  	if (!priv) { -		ret = -ENOMEM;  		dev_err(&pdev->dev, "unable to kmalloc\n"); -		goto bad0; +		return -ENOMEM;  	}  	priv->uioinfo = uioinfo; @@ -153,7 +152,7 @@ static int uio_pdrv_genirq_probe(struct platform_device *pdev)  			uioinfo->irq = UIO_IRQ_NONE;  		else if (ret < 0) {  			dev_err(&pdev->dev, "failed to get IRQ\n"); -			goto bad1; +			return ret;  		}  	} @@ -209,20 +208,12 @@ static int uio_pdrv_genirq_probe(struct platform_device *pdev)  	ret = uio_register_device(&pdev->dev, priv->uioinfo);  	if (ret) {  		dev_err(&pdev->dev, "unable to register uio device\n"); -		goto bad2; +		pm_runtime_disable(&pdev->dev); +		return ret;  	}  	platform_set_drvdata(pdev, priv);  	return 0; - bad2: -	pm_runtime_disable(&pdev->dev); - bad1: -	kfree(priv); - bad0: -	/* kfree uioinfo for OF */ -	if (pdev->dev.of_node) -		kfree(uioinfo); -	return ret;  }  static int uio_pdrv_genirq_remove(struct platform_device *pdev) @@ -235,11 +226,6 @@ static int uio_pdrv_genirq_remove(struct platform_device *pdev)  	priv->uioinfo->handler = NULL;  	priv->uioinfo->irqcontrol = NULL; -	/* kfree uioinfo for OF */ -	if (pdev->dev.of_node) -		kfree(priv->uioinfo); - -	kfree(priv);  	return 0;  }  | 
