All of lore.kernel.org
 help / color / mirror / Atom feed
From: Sylwester Nawrocki <s.nawrocki@samsung.com>
To: Mauro Carvalho Chehab <mchehab@redhat.com>
Cc: Peter Senna Tschudin <peter.senna@gmail.com>,
	linux-media@vger.kernel.org, linux-kernel@vger.kernel.org,
	Tomasz Stanislawski <t.stanislaws@samsung.com>
Subject: Re: Fwd: [PATCH v2] drivers/media/platform/s5p-tv/sdo_drv.c: fix error return code
Date: Mon, 24 Sep 2012 12:00:37 +0200	[thread overview]
Message-ID: <50602F45.1020205@samsung.com> (raw)
In-Reply-To: <505F6362.5090602@redhat.com>

On 09/23/2012 09:30 PM, Mauro Carvalho Chehab wrote:
> Sylwester,
> 
> Please review.
> 
> Regards,
> Mauro
> 
> -------- Mensagem original --------
> Assunto: [PATCH v2] drivers/media/platform/s5p-tv/sdo_drv.c: fix error return code
> Data: Thu,  6 Sep 2012 10:38:29 +0200
> De: Peter Senna Tschudin <peter.senna@gmail.com>
> Para: peter.senna@gmail.com, Mauro Carvalho Chehab <mchehab@infradead.org>
> CC: linux-media@vger.kernel.org, linux-kernel@vger.kernel.org
> 
> From: Peter Senna Tschudin <peter.senna@gmail.com>
> 
> Convert a nonnegative error return code to a negative one, as returned
> elsewhere in the function.
> 
> A simplified version of the semantic match that finds this problem is as
> follows: (http://coccinelle.lip6.fr/)
> 
> // <smpl>
> (
> if@p1 (\(ret < 0\|ret != 0\))
>  { ... return ret; }
> |
> ret@p1 = 0
> )
> ... when != ret = e1
>     when != &ret
> *if(...)
> {
>   ... when != ret = e2
>       when forall
>  return ret;
> }
> 
> // </smpl>
> 
> Signed-off-by: Peter Senna Tschudin <peter.senna@gmail.com>
> 
> ---
>  drivers/media/platform/s5p-tv/sdo_drv.c |    3 +++
>  1 file changed, 3 insertions(+)
> 
> diff --git a/drivers/media/platform/s5p-tv/sdo_drv.c b/drivers/media/platform/s5p-tv/sdo_drv.c
> index ad68bbe..58cf56d 100644
> --- a/drivers/media/platform/s5p-tv/sdo_drv.c
> +++ b/drivers/media/platform/s5p-tv/sdo_drv.c
> @@ -369,6 +369,7 @@ static int __devinit sdo_probe(struct platform_device *pdev)
>  	sdev->fout_vpll = clk_get(dev, "fout_vpll");
>  	if (IS_ERR_OR_NULL(sdev->fout_vpll)) {
>  		dev_err(dev, "failed to get clock 'fout_vpll'\n");
> +		ret = -ENXIO;

This patch improves the situation but it doesn't look like a proper fix
to me. First of all clk_get() return code should be checked only with
IS_ERR() and the error code should be propagated up to the caller, rather
than overwriting it with -ENXIO. It's important especially in cases where,
e.g we are getting EPROBE_DEFER instead of a valid resource.

>  		goto fail_dacphy;
>  	}
>  	dev_info(dev, "fout_vpll.rate = %lu\n", clk_get_rate(sclk_vpll));
> @@ -377,11 +378,13 @@ static int __devinit sdo_probe(struct platform_device *pdev)
>  	sdev->vdac = devm_regulator_get(dev, "vdd33a_dac");
>  	if (IS_ERR_OR_NULL(sdev->vdac)) {
>  		dev_err(dev, "failed to get regulator 'vdac'\n");
> +		ret = -ENXIO;

Same situation here..

>  		goto fail_fout_vpll;
>  	}
>  	sdev->vdet = devm_regulator_get(dev, "vdet");
>  	if (IS_ERR_OR_NULL(sdev->vdet)) {
>  		dev_err(dev, "failed to get regulator 'vdet'\n");
> +		ret = -ENXIO;
>  		goto fail_fout_vpll;
>  	}

end here.

I think something more like this is needed (I'm going to queue this
patch for 3.7):

8<------------------------------------------------------------------
>From 8d3ce303461a2c09991efc5b86a0f56789045fa9 Mon Sep 17 00:00:00 2001
From: Sylwester Nawrocki <s.nawrocki@samsung.com>
Date: Mon, 24 Sep 2012 10:37:51 +0200
Subject: [PATCH] s5p-tv: Fix return value in sdo_probe() on error paths

Use proper return value test for clk_get() and devm_regulator_get()
functions and propagate any errors from the clock and the regulator
subsystem to the driver core. In two cases a proper error code is
now returned rather than 0.

Reported-by: Peter Senna Tschudin <peter.senna@gmail.com>
Cc: Tomasz Stanislawski <t.stanislaws@samsung.com>
Signed-off-by: Sylwester Nawrocki <s.nawrocki@samsung.com>
Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com>
---
 drivers/media/platform/s5p-tv/sdo_drv.c | 25 ++++++++++++++-----------
 1 file changed, 14 insertions(+), 11 deletions(-)

diff --git a/drivers/media/platform/s5p-tv/sdo_drv.c
b/drivers/media/platform/s5p-tv/sdo_drv.c
index ad68bbe..2d1a654 100644
--- a/drivers/media/platform/s5p-tv/sdo_drv.c
+++ b/drivers/media/platform/s5p-tv/sdo_drv.c
@@ -341,47 +341,50 @@ static int __devinit sdo_probe(struct platform_device *pdev)

 	/* acquire clocks */
 	sdev->sclk_dac = clk_get(dev, "sclk_dac");
-	if (IS_ERR_OR_NULL(sdev->sclk_dac)) {
+	if (IS_ERR(sdev->sclk_dac)) {
 		dev_err(dev, "failed to get clock 'sclk_dac'\n");
-		ret = -ENXIO;
+		ret = PTR_ERR(sdev->sclk_dac);
 		goto fail;
 	}
 	sdev->dac = clk_get(dev, "dac");
-	if (IS_ERR_OR_NULL(sdev->dac)) {
+	if (IS_ERR(sdev->dac)) {
 		dev_err(dev, "failed to get clock 'dac'\n");
-		ret = -ENXIO;
+		ret = PTR_ERR(sdev->dac);
 		goto fail_sclk_dac;
 	}
 	sdev->dacphy = clk_get(dev, "dacphy");
-	if (IS_ERR_OR_NULL(sdev->dacphy)) {
+	if (IS_ERR(sdev->dacphy)) {
 		dev_err(dev, "failed to get clock 'dacphy'\n");
-		ret = -ENXIO;
+		ret = PTR_ERR(sdev->dacphy);
 		goto fail_dac;
 	}
 	sclk_vpll = clk_get(dev, "sclk_vpll");
-	if (IS_ERR_OR_NULL(sclk_vpll)) {
+	if (IS_ERR(sclk_vpll)) {
 		dev_err(dev, "failed to get clock 'sclk_vpll'\n");
-		ret = -ENXIO;
+		ret = PTR_ERR(sclk_vpll);
 		goto fail_dacphy;
 	}
 	clk_set_parent(sdev->sclk_dac, sclk_vpll);
 	clk_put(sclk_vpll);
 	sdev->fout_vpll = clk_get(dev, "fout_vpll");
-	if (IS_ERR_OR_NULL(sdev->fout_vpll)) {
+	if (IS_ERR(sdev->fout_vpll)) {
 		dev_err(dev, "failed to get clock 'fout_vpll'\n");
+		ret = PTR_ERR(sdev->fout_vpll);
 		goto fail_dacphy;
 	}
 	dev_info(dev, "fout_vpll.rate = %lu\n", clk_get_rate(sclk_vpll));

 	/* acquire regulator */
 	sdev->vdac = devm_regulator_get(dev, "vdd33a_dac");
-	if (IS_ERR_OR_NULL(sdev->vdac)) {
+	if (IS_ERR(sdev->vdac)) {
 		dev_err(dev, "failed to get regulator 'vdac'\n");
+		ret = PTR_ERR(sdev->vdac);
 		goto fail_fout_vpll;
 	}
 	sdev->vdet = devm_regulator_get(dev, "vdet");
-	if (IS_ERR_OR_NULL(sdev->vdet)) {
+	if (IS_ERR(sdev->vdet)) {
 		dev_err(dev, "failed to get regulator 'vdet'\n");
+		ret = PTR_ERR(sdev->vdet);
 		goto fail_fout_vpll;
 	}

-- 
1.7.11.3
8<------------------------------------------------------------------


Regards,
Sylwester

  reply	other threads:[~2012-09-24 10:00 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-09-04 16:14 [PATCH 2/5] drivers/media/platform/s5p-tv/sdo_drv.c: fix error return code Peter Senna Tschudin
2012-09-04 16:14 ` Peter Senna Tschudin
2012-09-05 19:33 ` Ezequiel Garcia
2012-09-05 19:33   ` Ezequiel Garcia
2012-09-06  8:38 ` [PATCH v2] " Peter Senna Tschudin
2012-09-23 19:30   ` Fwd: " Mauro Carvalho Chehab
2012-09-24 10:00     ` Sylwester Nawrocki [this message]
2012-09-24  9:16   ` Tomasz Stanislawski
  -- strict thread matches above, loose matches on Subject: below --
2012-09-06  8:43 Fwd: " Peter Senna Tschudin

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=50602F45.1020205@samsung.com \
    --to=s.nawrocki@samsung.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-media@vger.kernel.org \
    --cc=mchehab@redhat.com \
    --cc=peter.senna@gmail.com \
    --cc=t.stanislaws@samsung.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.