On Wed, 9 Aug 2023 at 09:18, Harshit Mogalapalli <harshit.m.mogalapalli@xxxxxxxxxx> 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@xxxxxxxxxx> > Closes: https://lore.kernel.org/all/a3829ed3-d827-4b9d-827e-9cc24a3ec3bc@moroto.mountain/ > Signed-off-by: Harshit Mogalapalli <harshit.m.mogalapalli@xxxxxxxxxx> 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 >