All of lore.kernel.org
 help / color / mirror / Atom feed
From: Miquel Raynal <miquel.raynal@bootlin.com>
To: Evgeny Novikov <novikov@ispras.ru>
Cc: Richard Weinberger <richard@nod.at>,
	Vignesh Raghavendra <vigneshr@ti.com>,
	Ramuthevar Vadivel Murugan
	<vadivel.muruganx.ramuthevar@linux.intel.com>,
	Martin Blumenstingl <martin.blumenstingl@googlemail.com>,
	Christophe JAILLET <christophe.jaillet@wanadoo.fr>,
	Kirill Shilimanov <kirill.shilimanov@huawei.com>,
	Anton Vasilyev <vasilyev@ispras.ru>,
	linux-mtd@lists.infradead.org, linux-kernel@vger.kernel.org,
	ldv-project@linuxtesting.org
Subject: Re: [PATCH] mtd: rawnand: intel: Fix error handling in probe
Date: Mon, 16 Aug 2021 09:48:38 +0200	[thread overview]
Message-ID: <20210816094838.78c8e248@xps13> (raw)
In-Reply-To: <20210812110100.1279-1-novikov@ispras.ru>

Hi Evgeny,

Evgeny Novikov <novikov@ispras.ru> wrote on Thu, 12 Aug 2021 14:01:00
+0300:

> ebu_nand_probe() did not invoke ebu_dma_cleanup() and
> clk_disable_unprepare() on some error handling paths. The patch fixes
> that.
> 
> Found by Linux Driver Verification project (linuxtesting.org).

LGTM

Can you add a Fixes: tag and possibly a Cc: stable tag as well?
(same for "mtd: rawnand: mxic: Enable and prepare clocks in probe")

> 
> Signed-off-by: Evgeny Novikov <novikov@ispras.ru>
> Co-developed-by: Kirill Shilimanov <kirill.shilimanov@huawei.com>
> Signed-off-by: Kirill Shilimanov <kirill.shilimanov@huawei.com>
> Co-developed-by: Anton Vasilyev <vasilyev@ispras.ru>
> Signed-off-by: Anton Vasilyev <vasilyev@ispras.ru>
> ---
>  drivers/mtd/nand/raw/intel-nand-controller.c | 27 +++++++++++++-------
>  1 file changed, 18 insertions(+), 9 deletions(-)
> 
> diff --git a/drivers/mtd/nand/raw/intel-nand-controller.c b/drivers/mtd/nand/raw/intel-nand-controller.c
> index 8b49fd56cf96..29e8a546dcd6 100644
> --- a/drivers/mtd/nand/raw/intel-nand-controller.c
> +++ b/drivers/mtd/nand/raw/intel-nand-controller.c
> @@ -631,19 +631,26 @@ static int ebu_nand_probe(struct platform_device *pdev)
>  	ebu_host->clk_rate = clk_get_rate(ebu_host->clk);
>  
>  	ebu_host->dma_tx = dma_request_chan(dev, "tx");
> -	if (IS_ERR(ebu_host->dma_tx))
> -		return dev_err_probe(dev, PTR_ERR(ebu_host->dma_tx),
> -				     "failed to request DMA tx chan!.\n");
> +	if (IS_ERR(ebu_host->dma_tx)) {
> +		ret = dev_err_probe(dev, PTR_ERR(ebu_host->dma_tx),
> +				    "failed to request DMA tx chan!.\n");
> +		goto err_disable_unprepare_clk;
> +	}
>  
>  	ebu_host->dma_rx = dma_request_chan(dev, "rx");
> -	if (IS_ERR(ebu_host->dma_rx))
> -		return dev_err_probe(dev, PTR_ERR(ebu_host->dma_rx),
> -				     "failed to request DMA rx chan!.\n");
> +	if (IS_ERR(ebu_host->dma_rx)) {
> +		ret = dev_err_probe(dev, PTR_ERR(ebu_host->dma_rx),
> +				    "failed to request DMA rx chan!.\n");
> +		ebu_host->dma_rx = NULL;
> +		goto err_cleanup_dma;
> +	}
>  
>  	resname = devm_kasprintf(dev, GFP_KERNEL, "addr_sel%d", cs);
>  	res = platform_get_resource_byname(pdev, IORESOURCE_MEM, resname);
> -	if (!res)
> -		return -EINVAL;
> +	if (!res) {
> +		ret = -EINVAL;
> +		goto err_cleanup_dma;
> +	}
>  	ebu_host->cs[cs].addr_sel = res->start;
>  	writel(ebu_host->cs[cs].addr_sel | EBU_ADDR_MASK(5) | EBU_ADDR_SEL_REGEN,
>  	       ebu_host->ebu + EBU_ADDR_SEL(cs));
> @@ -653,7 +660,8 @@ static int ebu_nand_probe(struct platform_device *pdev)
>  	mtd = nand_to_mtd(&ebu_host->chip);
>  	if (!mtd->name) {
>  		dev_err(ebu_host->dev, "NAND label property is mandatory\n");
> -		return -EINVAL;
> +		ret = -EINVAL;
> +		goto err_cleanup_dma;
>  	}
>  
>  	mtd->dev.parent = dev;
> @@ -681,6 +689,7 @@ static int ebu_nand_probe(struct platform_device *pdev)
>  	nand_cleanup(&ebu_host->chip);
>  err_cleanup_dma:
>  	ebu_dma_cleanup(ebu_host);
> +err_disable_unprepare_clk:
>  	clk_disable_unprepare(ebu_host->clk);
>  
>  	return ret;

Thanks,
Miquèl

______________________________________________________
Linux MTD discussion mailing list
http://lists.infradead.org/mailman/listinfo/linux-mtd/

WARNING: multiple messages have this Message-ID (diff)
From: Miquel Raynal <miquel.raynal@bootlin.com>
To: Evgeny Novikov <novikov@ispras.ru>
Cc: Richard Weinberger <richard@nod.at>,
	Vignesh Raghavendra <vigneshr@ti.com>,
	Ramuthevar Vadivel Murugan 
	<vadivel.muruganx.ramuthevar@linux.intel.com>,
	Martin Blumenstingl <martin.blumenstingl@googlemail.com>,
	Christophe JAILLET <christophe.jaillet@wanadoo.fr>,
	Kirill Shilimanov <kirill.shilimanov@huawei.com>,
	Anton Vasilyev <vasilyev@ispras.ru>,
	linux-mtd@lists.infradead.org, linux-kernel@vger.kernel.org,
	ldv-project@linuxtesting.org
Subject: Re: [PATCH] mtd: rawnand: intel: Fix error handling in probe
Date: Mon, 16 Aug 2021 09:48:38 +0200	[thread overview]
Message-ID: <20210816094838.78c8e248@xps13> (raw)
In-Reply-To: <20210812110100.1279-1-novikov@ispras.ru>

Hi Evgeny,

Evgeny Novikov <novikov@ispras.ru> wrote on Thu, 12 Aug 2021 14:01:00
+0300:

> ebu_nand_probe() did not invoke ebu_dma_cleanup() and
> clk_disable_unprepare() on some error handling paths. The patch fixes
> that.
> 
> Found by Linux Driver Verification project (linuxtesting.org).

LGTM

Can you add a Fixes: tag and possibly a Cc: stable tag as well?
(same for "mtd: rawnand: mxic: Enable and prepare clocks in probe")

> 
> Signed-off-by: Evgeny Novikov <novikov@ispras.ru>
> Co-developed-by: Kirill Shilimanov <kirill.shilimanov@huawei.com>
> Signed-off-by: Kirill Shilimanov <kirill.shilimanov@huawei.com>
> Co-developed-by: Anton Vasilyev <vasilyev@ispras.ru>
> Signed-off-by: Anton Vasilyev <vasilyev@ispras.ru>
> ---
>  drivers/mtd/nand/raw/intel-nand-controller.c | 27 +++++++++++++-------
>  1 file changed, 18 insertions(+), 9 deletions(-)
> 
> diff --git a/drivers/mtd/nand/raw/intel-nand-controller.c b/drivers/mtd/nand/raw/intel-nand-controller.c
> index 8b49fd56cf96..29e8a546dcd6 100644
> --- a/drivers/mtd/nand/raw/intel-nand-controller.c
> +++ b/drivers/mtd/nand/raw/intel-nand-controller.c
> @@ -631,19 +631,26 @@ static int ebu_nand_probe(struct platform_device *pdev)
>  	ebu_host->clk_rate = clk_get_rate(ebu_host->clk);
>  
>  	ebu_host->dma_tx = dma_request_chan(dev, "tx");
> -	if (IS_ERR(ebu_host->dma_tx))
> -		return dev_err_probe(dev, PTR_ERR(ebu_host->dma_tx),
> -				     "failed to request DMA tx chan!.\n");
> +	if (IS_ERR(ebu_host->dma_tx)) {
> +		ret = dev_err_probe(dev, PTR_ERR(ebu_host->dma_tx),
> +				    "failed to request DMA tx chan!.\n");
> +		goto err_disable_unprepare_clk;
> +	}
>  
>  	ebu_host->dma_rx = dma_request_chan(dev, "rx");
> -	if (IS_ERR(ebu_host->dma_rx))
> -		return dev_err_probe(dev, PTR_ERR(ebu_host->dma_rx),
> -				     "failed to request DMA rx chan!.\n");
> +	if (IS_ERR(ebu_host->dma_rx)) {
> +		ret = dev_err_probe(dev, PTR_ERR(ebu_host->dma_rx),
> +				    "failed to request DMA rx chan!.\n");
> +		ebu_host->dma_rx = NULL;
> +		goto err_cleanup_dma;
> +	}
>  
>  	resname = devm_kasprintf(dev, GFP_KERNEL, "addr_sel%d", cs);
>  	res = platform_get_resource_byname(pdev, IORESOURCE_MEM, resname);
> -	if (!res)
> -		return -EINVAL;
> +	if (!res) {
> +		ret = -EINVAL;
> +		goto err_cleanup_dma;
> +	}
>  	ebu_host->cs[cs].addr_sel = res->start;
>  	writel(ebu_host->cs[cs].addr_sel | EBU_ADDR_MASK(5) | EBU_ADDR_SEL_REGEN,
>  	       ebu_host->ebu + EBU_ADDR_SEL(cs));
> @@ -653,7 +660,8 @@ static int ebu_nand_probe(struct platform_device *pdev)
>  	mtd = nand_to_mtd(&ebu_host->chip);
>  	if (!mtd->name) {
>  		dev_err(ebu_host->dev, "NAND label property is mandatory\n");
> -		return -EINVAL;
> +		ret = -EINVAL;
> +		goto err_cleanup_dma;
>  	}
>  
>  	mtd->dev.parent = dev;
> @@ -681,6 +689,7 @@ static int ebu_nand_probe(struct platform_device *pdev)
>  	nand_cleanup(&ebu_host->chip);
>  err_cleanup_dma:
>  	ebu_dma_cleanup(ebu_host);
> +err_disable_unprepare_clk:
>  	clk_disable_unprepare(ebu_host->clk);
>  
>  	return ret;

Thanks,
Miquèl

  reply	other threads:[~2021-08-16  7:49 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-08-12 11:01 [PATCH] mtd: rawnand: intel: Fix error handling in probe Evgeny Novikov
2021-08-12 11:01 ` Evgeny Novikov
2021-08-16  7:48 ` Miquel Raynal [this message]
2021-08-16  7:48   ` Miquel Raynal

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=20210816094838.78c8e248@xps13 \
    --to=miquel.raynal@bootlin.com \
    --cc=christophe.jaillet@wanadoo.fr \
    --cc=kirill.shilimanov@huawei.com \
    --cc=ldv-project@linuxtesting.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mtd@lists.infradead.org \
    --cc=martin.blumenstingl@googlemail.com \
    --cc=novikov@ispras.ru \
    --cc=richard@nod.at \
    --cc=vadivel.muruganx.ramuthevar@linux.intel.com \
    --cc=vasilyev@ispras.ru \
    --cc=vigneshr@ti.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.