[PATCH v2 38/60] drm/omap: dss: Cleanup error paths in output init functions

Sebastian Reichel sre at kernel.org
Sun Jun 10 21:17:07 UTC 2018


Hi,

On Sat, May 26, 2018 at 08:24:56PM +0300, Laurent Pinchart wrote:
> Rename the jump labels according to the cleanup they perform, not the
> location they're accessed from, and move functions from error checks to
> cleanup paths, and move reference handling to simplify cleanup.
> 
> Signed-off-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
> ---

Reviewed-by: Sebastian Reichel <sebastian.reichel at collabora.co.uk>

-- Sebastian

>  drivers/gpu/drm/omapdrm/dss/dpi.c   | 10 ++--------
>  drivers/gpu/drm/omapdrm/dss/dsi.c   |  9 ++++-----
>  drivers/gpu/drm/omapdrm/dss/hdmi4.c |  7 ++++---
>  drivers/gpu/drm/omapdrm/dss/hdmi5.c |  7 ++++---
>  drivers/gpu/drm/omapdrm/dss/sdi.c   |  7 ++-----
>  drivers/gpu/drm/omapdrm/dss/venc.c  |  7 +++----
>  6 files changed, 19 insertions(+), 28 deletions(-)
> 
> diff --git a/drivers/gpu/drm/omapdrm/dss/dpi.c b/drivers/gpu/drm/omapdrm/dss/dpi.c
> index 8a7c951a413c..e97f54d5f3e1 100644
> --- a/drivers/gpu/drm/omapdrm/dss/dpi.c
> +++ b/drivers/gpu/drm/omapdrm/dss/dpi.c
> @@ -745,15 +745,14 @@ int dpi_init_port(struct dss_device *dss, struct platform_device *pdev,
>  		return 0;
>  
>  	r = of_property_read_u32(ep, "data-lines", &datalines);
> +	of_node_put(ep);
>  	if (r) {
>  		DSSERR("failed to parse datalines\n");
> -		goto err_datalines;
> +		return r;
>  	}
>  
>  	dpi->data_lines = datalines;
>  
> -	of_node_put(ep);
> -
>  	dpi->pdev = pdev;
>  	dpi->dss_model = dss_model;
>  	dpi->dss = dss;
> @@ -764,11 +763,6 @@ int dpi_init_port(struct dss_device *dss, struct platform_device *pdev,
>  	dpi_init_output_port(dpi, port);
>  
>  	return 0;
> -
> -err_datalines:
> -	of_node_put(ep);
> -
> -	return r;
>  }
>  
>  void dpi_uninit_port(struct device_node *port)
> diff --git a/drivers/gpu/drm/omapdrm/dss/dsi.c b/drivers/gpu/drm/omapdrm/dss/dsi.c
> index b3e50d8a7477..278094f29255 100644
> --- a/drivers/gpu/drm/omapdrm/dss/dsi.c
> +++ b/drivers/gpu/drm/omapdrm/dss/dsi.c
> @@ -5360,7 +5360,7 @@ static int dsi_bind(struct device *dev, struct device *master, void *data)
>  
>  	r = dsi_runtime_get(dsi);
>  	if (r)
> -		goto err_runtime_get;
> +		goto err_pm_disable;
>  
>  	rev = dsi_read_reg(dsi, DSI_REVISION);
>  	dev_dbg(dev, "OMAP DSI rev %d.%d\n",
> @@ -5381,7 +5381,7 @@ static int dsi_bind(struct device *dev, struct device *master, void *data)
>  	r = dsi_probe_of(dsi);
>  	if (r) {
>  		DSSERR("Invalid DSI DT data\n");
> -		goto err_probe_of;
> +		goto err_uninit_output;
>  	}
>  
>  	r = of_platform_populate(dev->of_node, NULL, NULL, dev);
> @@ -5404,11 +5404,10 @@ static int dsi_bind(struct device *dev, struct device *master, void *data)
>  
>  	return 0;
>  
> -err_probe_of:
> +err_uninit_output:
>  	dsi_uninit_output(dsi);
>  	dsi_runtime_put(dsi);
> -
> -err_runtime_get:
> +err_pm_disable:
>  	pm_runtime_disable(dev);
>  	return r;
>  }
> diff --git a/drivers/gpu/drm/omapdrm/dss/hdmi4.c b/drivers/gpu/drm/omapdrm/dss/hdmi4.c
> index bf800cede2ad..1d1f2e0b2b2a 100644
> --- a/drivers/gpu/drm/omapdrm/dss/hdmi4.c
> +++ b/drivers/gpu/drm/omapdrm/dss/hdmi4.c
> @@ -780,9 +780,7 @@ static int hdmi4_bind(struct device *dev, struct device *master, void *data)
>  	r = hdmi_audio_register(hdmi);
>  	if (r) {
>  		DSSERR("Registering HDMI audio failed\n");
> -		hdmi_uninit_output(hdmi);
> -		pm_runtime_disable(&pdev->dev);
> -		return r;
> +		goto err_uninit_output;
>  	}
>  
>  	hdmi->debugfs = dss_debugfs_create_file(dss, "hdmi", hdmi_dump_regs,
> @@ -790,6 +788,9 @@ static int hdmi4_bind(struct device *dev, struct device *master, void *data)
>  
>  	return 0;
>  
> +err_uninit_output:
> +	hdmi_uninit_output(hdmi);
> +	pm_runtime_disable(&pdev->dev);
>  err_pll:
>  	hdmi_pll_uninit(&hdmi->pll);
>  err_free:
> diff --git a/drivers/gpu/drm/omapdrm/dss/hdmi5.c b/drivers/gpu/drm/omapdrm/dss/hdmi5.c
> index e5d23dd19f99..92ae561bf974 100644
> --- a/drivers/gpu/drm/omapdrm/dss/hdmi5.c
> +++ b/drivers/gpu/drm/omapdrm/dss/hdmi5.c
> @@ -773,9 +773,7 @@ static int hdmi5_bind(struct device *dev, struct device *master, void *data)
>  	r = hdmi_audio_register(hdmi);
>  	if (r) {
>  		DSSERR("Registering HDMI audio failed %d\n", r);
> -		hdmi_uninit_output(hdmi);
> -		pm_runtime_disable(&pdev->dev);
> -		return r;
> +		goto err_uninit_output;
>  	}
>  
>  	hdmi->debugfs = dss_debugfs_create_file(dss, "hdmi", hdmi_dump_regs,
> @@ -783,6 +781,9 @@ static int hdmi5_bind(struct device *dev, struct device *master, void *data)
>  
>  	return 0;
>  
> +err_uninit_output:
> +	hdmi_uninit_output(hdmi);
> +	pm_runtime_disable(&pdev->dev);
>  err_pll:
>  	hdmi_pll_uninit(&hdmi->pll);
>  err_free:
> diff --git a/drivers/gpu/drm/omapdrm/dss/sdi.c b/drivers/gpu/drm/omapdrm/dss/sdi.c
> index fd5320041911..0ace553a21c5 100644
> --- a/drivers/gpu/drm/omapdrm/dss/sdi.c
> +++ b/drivers/gpu/drm/omapdrm/dss/sdi.c
> @@ -355,16 +355,15 @@ int sdi_init_port(struct dss_device *dss, struct platform_device *pdev,
>  	}
>  
>  	r = of_property_read_u32(ep, "datapairs", &datapairs);
> +	of_node_put(ep);
>  	if (r) {
>  		DSSERR("failed to parse datapairs\n");
> -		goto err_datapairs;
> +		goto err_free;
>  	}
>  
>  	sdi->datapairs = datapairs;
>  	sdi->dss = dss;
>  
> -	of_node_put(ep);
> -
>  	sdi->pdev = pdev;
>  	port->data = sdi;
>  
> @@ -372,8 +371,6 @@ int sdi_init_port(struct dss_device *dss, struct platform_device *pdev,
>  
>  	return 0;
>  
> -err_datapairs:
> -	of_node_put(ep);
>  err_free:
>  	kfree(sdi);
>  
> diff --git a/drivers/gpu/drm/omapdrm/dss/venc.c b/drivers/gpu/drm/omapdrm/dss/venc.c
> index 47985549a81c..c8fb91bb1ad3 100644
> --- a/drivers/gpu/drm/omapdrm/dss/venc.c
> +++ b/drivers/gpu/drm/omapdrm/dss/venc.c
> @@ -867,7 +867,7 @@ static int venc_bind(struct device *dev, struct device *master, void *data)
>  
>  	r = venc_runtime_get(venc);
>  	if (r)
> -		goto err_runtime_get;
> +		goto err_pm_disable;
>  
>  	rev_id = (u8)(venc_read_reg(venc, VENC_REV_ID) & 0xff);
>  	dev_dbg(&pdev->dev, "OMAP VENC rev %d\n", rev_id);
> @@ -877,7 +877,7 @@ static int venc_bind(struct device *dev, struct device *master, void *data)
>  	r = venc_probe_of(venc);
>  	if (r) {
>  		DSSERR("Invalid DT data\n");
> -		goto err_probe_of;
> +		goto err_pm_disable;
>  	}
>  
>  	venc->debugfs = dss_debugfs_create_file(dss, "venc", venc_dump_regs,
> @@ -887,8 +887,7 @@ static int venc_bind(struct device *dev, struct device *master, void *data)
>  
>  	return 0;
>  
> -err_probe_of:
> -err_runtime_get:
> +err_pm_disable:
>  	pm_runtime_disable(&pdev->dev);
>  err_free:
>  	kfree(venc);
> -- 
> Regards,
> 
> Laurent Pinchart
> 
> _______________________________________________
> dri-devel mailing list
> dri-devel at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/dri-devel
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 833 bytes
Desc: not available
URL: <https://lists.freedesktop.org/archives/dri-devel/attachments/20180610/2c180f29/attachment-0001.sig>


More information about the dri-devel mailing list