drivers/media/platform/s5p-tv/sdo_drv.c: fix error return code
Subsystems (2)
PATCH 2/5 drivers/media/platform/s5p-tv/sdo_drv.c: fix error return code
From: Peter Senna Tschudin <[email protected]>
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>
--- drivers/media/platform/s5p-tv/sdo_drv.c | 3 +++ 1 file changed, 3 insertions(+)
drivers/media/platform/s5p-tv/sdo_drv.c +3 -0
@@ -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 = -ENODEV ; 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 = -ENODEV ; 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 = -ENODEV ; goto fail_fout_vpll; }
Hi Peter,
Quoted 49 lines · Peter Senna Tschudin
From: Peter Senna Tschudin <[email protected]>
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 = e1when != &ret*if(...)
{
... when != ret = e2
when forall
return ret;
}// </smpl>
Signed-off-by Peter Senna Tschudin <[email protected]>--- drivers/media/platform/s5p-tv/sdo_drv.c | 3 +++ 1 file changed, 3 insertions(+)drivers/media/platform/s5p-tv/sdo_drv.c +1
-0@@ -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 = -ENODEV ; 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" );
drivers/media/platform/s5p-tv/sdo_drv.c static int __devinit sdo_probe(struct platform_device *pdev) · line 390
Quoted 10 lines
drivers/media/platform/s5p-tv/sdo_drv.c +2
-0+ ret = -ENODEV ; 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 = -ENODEV ; goto fail_fout_vpll; }
Just a nitpick: why using ENODEV when the rest of the function is using ENXIO? In which case, you could fix this with a less intrusive change, by initializating ret to -ENXIO.
Hope this helps,
Ezequiel.
PATCH v2 1/1 drivers/media/platform/s5p-tv/sdo_drv.c: fix error return code
In reply to Peter Senna TschudinFrom: Peter Senna Tschudin <[email protected]>
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>
--- drivers/media/platform/s5p-tv/sdo_drv.c | 3 +++ 1 file changed, 3 insertions(+)
drivers/media/platform/s5p-tv/sdo_drv.c +3 -0
@@ -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 ; 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 ; 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; }
PATCH v2 1/1 drivers/media/platform/s5p-tv/sdo_drv.c: fix error return code
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 <[email protected]>
Para: [email protected], Mauro Carvalho Chehab <[email protected]>
CC: [email protected], [email protected]
From: Peter Senna Tschudin <[email protected]>
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>
--- drivers/media/platform/s5p-tv/sdo_drv.c | 3 +++ 1 file changed, 3 insertions(+)
drivers/media/platform/s5p-tv/sdo_drv.c +3 -0
@@ -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 ; 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 ; 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; }
--
To unsubscribe from this list: send the line "unsubscribe linux-media" in the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html
Quoted 51 lines · Mauro Carvalho Chehab
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 <[email protected]>
Para: [email protected], Mauro Carvalho Chehab <[email protected]>
CC: [email protected], [email protected]From: Peter Senna Tschudin <[email protected]>
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 = e1when != &ret*if(...)
{
... when != ret = e2
when forall
return ret;
}// </smpl>
Signed-off-by Peter Senna Tschudin <[email protected]>--- drivers/media/platform/s5p-tv/sdo_drv.c | 3 +++ 1 file changed, 3 insertions(+)drivers/media/platform/s5p-tv/sdo_drv.c +0
-0
drivers/media/platform/s5p-tv/sdo_drv.c static int __devinit sdo_probe(struct platform_device *pdev) · line 372
Quoted 4 lines
drivers/media/platform/s5p-tv/sdo_drv.c +1
-0@@ -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.
drivers/media/platform/s5p-tv/sdo_drv.c static int __devinit sdo_probe(struct platform_device *pdev) · line 381
Quoted 8 lines
drivers/media/platform/s5p-tv/sdo_drv.c +1
-0goto 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..
drivers/media/platform/s5p-tv/sdo_drv.c static int __devinit sdo_probe(struct platform_device *pdev) · line 389
Quoted 8 lines
drivers/media/platform/s5p-tv/sdo_drv.c +1
-0goto 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<------------------------------------------------------------------
Quoted 1 line
From
8d3ce303461a2c09991efc5b86a0f56789045fa9Mon Sep 17 00:00:00 2001
From: Sylwester Nawrocki <[email protected]>
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.
--- drivers/media/platform/s5p-tv/sdo_drv.c | 25 ++++++++++++++----------- 1 file changed, 14 insertions(+), 11 deletions(-)
(quoted diff) +0 -0
b/drivers/media/platform/s5p-tv/sdo_drv.c
index ad68bbe..2d1a654 100644
drivers/media/platform/s5p-tv/sdo_drv.c +14 -11
@@ -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; }
Signature · 6 lines
1.7.11.3 8<------------------------------------------------------------------ Regards, Sylwester
Hi.
Quoted 24 lines · Peter Senna Tschudin
From: Peter Senna Tschudin <[email protected]>
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 = e1when != &ret*if(...)
{
... when != ret = e2
when forall
return ret;
}
Quoted 3 lines
// </smpl>
Signed-off-by Peter Senna Tschudin <[email protected]>
Quoted 32 lines
--- drivers/media/platform/s5p-tv/sdo_drv.c | 3 +++ 1 file changed, 3 insertions(+)drivers/media/platform/s5p-tv/sdo_drv.c +3
-0@@ -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 ; 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 ; 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; }