Message ID | 20230809071812.547229-1-harshit.m.mogalapalli@oracle.com |
---|---|
State | New |
Headers | show |
Series | [next,v2,1/2] mmc: sunplus: Fix error handling in spmmc_drv_probe() | expand |
On Wed, 9 Aug 2023 at 09:18, Harshit Mogalapalli <harshit.m.mogalapalli@oracle.com> wrote: > > When mmc allocation succeeds, the error paths are not freeing mmc. > > Fix the above issue by changing mmc_alloc_host() to devm_mmc_alloc_host() > to simplify the error handling. Remove label 'probe_free_host' as devm_* > api takes care of freeing, also remove mmc_free_host() from remove > function as devm_* takes care of freeing. > > Fixes: 4e268fed8b18 ("mmc: Add mmc driver for Sunplus SP7021") > Reported-by: Dan Carpenter <dan.carpenter@linaro.org> > Closes: https://lore.kernel.org/all/a3829ed3-d827-4b9d-827e-9cc24a3ec3bc@moroto.mountain/ > Signed-off-by: Harshit Mogalapalli <harshit.m.mogalapalli@oracle.com> This doesn't apply on my next branch, please rebase it. Moreover, it looks like you should replace a few more "goto probe_free_host;" with "return ret;". Please have a closer look. Kind regards Uffe > --- > This is based on static analysis with smatch, only compile tested. > > v1->v2: Simplify code by using devm_mmc_alloc_host() instead of > mmc_alloc_host() (Ulf Hansson's suggestion) > --- > drivers/mmc/host/sunplus-mmc.c | 14 +++----------- > 1 file changed, 3 insertions(+), 11 deletions(-) > > diff --git a/drivers/mmc/host/sunplus-mmc.c b/drivers/mmc/host/sunplus-mmc.c > index a55a87f64d2a..2bdebeb1f8e4 100644 > --- a/drivers/mmc/host/sunplus-mmc.c > +++ b/drivers/mmc/host/sunplus-mmc.c > @@ -863,11 +863,9 @@ static int spmmc_drv_probe(struct platform_device *pdev) > struct spmmc_host *host; > int ret = 0; > > - mmc = mmc_alloc_host(sizeof(*host), &pdev->dev); > - if (!mmc) { > - ret = -ENOMEM; > - goto probe_free_host; > - } > + mmc = devm_mmc_alloc_host(&pdev->dev, sizeof(struct spmmc_host)); > + if (!mmc) > + return -ENOMEM; > > host = mmc_priv(mmc); > host->mmc = mmc; > @@ -938,11 +936,6 @@ static int spmmc_drv_probe(struct platform_device *pdev) > > clk_disable: > clk_disable_unprepare(host->clk); > - > -probe_free_host: > - if (mmc) > - mmc_free_host(mmc); > - > return ret; > } > > @@ -956,7 +949,6 @@ static int spmmc_drv_remove(struct platform_device *dev) > pm_runtime_put_noidle(&dev->dev); > pm_runtime_disable(&dev->dev); > platform_set_drvdata(dev, NULL); > - mmc_free_host(host->mmc); > > return 0; > } > -- > 2.39.3 >
On Wed, 9 Aug 2023 at 09:19, Harshit Mogalapalli <harshit.m.mogalapalli@oracle.com> wrote: > > The platform_get_irq() function returns negative error codes on failure. > > Fixes: 4e268fed8b18 ("mmc: Add mmc driver for Sunplus SP7021") > Reported-by: Dan Carpenter <dan.carpenter@linaro.org> > Closes: https://lore.kernel.org/all/a3829ed3-d827-4b9d-827e-9cc24a3ec3bc@moroto.mountain/ > Signed-off-by: Harshit Mogalapalli <harshit.m.mogalapalli@oracle.com> Applied for fixes and by adding a stable tag, thanks! Kind regards Uffe > --- > v1->v2: Split into two patches as they are doing different things. > > This is based on static analysis with smatch, only compile tested. > --- > drivers/mmc/host/sunplus-mmc.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/drivers/mmc/host/sunplus-mmc.c b/drivers/mmc/host/sunplus-mmc.c > index 2bdebeb1f8e4..e9cb1a57cb75 100644 > --- a/drivers/mmc/host/sunplus-mmc.c > +++ b/drivers/mmc/host/sunplus-mmc.c > @@ -885,7 +885,7 @@ static int spmmc_drv_probe(struct platform_device *pdev) > return dev_err_probe(&pdev->dev, PTR_ERR(host->rstc), "rst get fail\n"); > > host->irq = platform_get_irq(pdev, 0); > - if (host->irq <= 0) > + if (host->irq < 0) > return host->irq; > > ret = devm_request_threaded_irq(&pdev->dev, host->irq, > -- > 2.39.3 >
On Wed, Aug 09, 2023 at 01:33:51PM +0200, Ulf Hansson wrote: > On Wed, 9 Aug 2023 at 09:19, Harshit Mogalapalli > <harshit.m.mogalapalli@oracle.com> wrote: > > > > The platform_get_irq() function returns negative error codes on failure. > > > > Fixes: 4e268fed8b18 ("mmc: Add mmc driver for Sunplus SP7021") > > Reported-by: Dan Carpenter <dan.carpenter@linaro.org> > > Closes: https://lore.kernel.org/all/a3829ed3-d827-4b9d-827e-9cc24a3ec3bc@moroto.mountain/ > > Signed-off-by: Harshit Mogalapalli <harshit.m.mogalapalli@oracle.com> > > Applied for fixes and by adding a stable tag, thanks! It's not really a fix. The platform_get_irq() function can't actually return zero. I asked Arnd about this and he said that there were some arches where zero was a valid IRQ but they're not in the upstream kernel any more and we're hopefully not going to do that again. regards, dan carpenter
diff --git a/drivers/mmc/host/sunplus-mmc.c b/drivers/mmc/host/sunplus-mmc.c index a55a87f64d2a..2bdebeb1f8e4 100644 --- a/drivers/mmc/host/sunplus-mmc.c +++ b/drivers/mmc/host/sunplus-mmc.c @@ -863,11 +863,9 @@ static int spmmc_drv_probe(struct platform_device *pdev) struct spmmc_host *host; int ret = 0; - mmc = mmc_alloc_host(sizeof(*host), &pdev->dev); - if (!mmc) { - ret = -ENOMEM; - goto probe_free_host; - } + mmc = devm_mmc_alloc_host(&pdev->dev, sizeof(struct spmmc_host)); + if (!mmc) + return -ENOMEM; host = mmc_priv(mmc); host->mmc = mmc; @@ -938,11 +936,6 @@ static int spmmc_drv_probe(struct platform_device *pdev) clk_disable: clk_disable_unprepare(host->clk); - -probe_free_host: - if (mmc) - mmc_free_host(mmc); - return ret; } @@ -956,7 +949,6 @@ static int spmmc_drv_remove(struct platform_device *dev) pm_runtime_put_noidle(&dev->dev); pm_runtime_disable(&dev->dev); platform_set_drvdata(dev, NULL); - mmc_free_host(host->mmc); return 0; }
When mmc allocation succeeds, the error paths are not freeing mmc. Fix the above issue by changing mmc_alloc_host() to devm_mmc_alloc_host() to simplify the error handling. Remove label 'probe_free_host' as devm_* api takes care of freeing, also remove mmc_free_host() from remove function as devm_* takes care of freeing. Fixes: 4e268fed8b18 ("mmc: Add mmc driver for Sunplus SP7021") Reported-by: Dan Carpenter <dan.carpenter@linaro.org> Closes: https://lore.kernel.org/all/a3829ed3-d827-4b9d-827e-9cc24a3ec3bc@moroto.mountain/ Signed-off-by: Harshit Mogalapalli <harshit.m.mogalapalli@oracle.com> --- This is based on static analysis with smatch, only compile tested. v1->v2: Simplify code by using devm_mmc_alloc_host() instead of mmc_alloc_host() (Ulf Hansson's suggestion) --- drivers/mmc/host/sunplus-mmc.c | 14 +++----------- 1 file changed, 3 insertions(+), 11 deletions(-)