On Wed, 9 Aug 2023 at 13:08, Ulf Hansson <ulf.hansson@xxxxxxxxxx> wrote: > > 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. Oh, my bad, please ignore the above! I had another fix for the sunplus driver queued on my next branch. I have moved that patch to fixes and applied your patch on top, thanks! 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 > >