diff mbox series

i2c: qup: Add missing unwind goto in qup_i2c_probe()

Message ID 20230418135612.598-1-d202180596@hust.edu.cn
State Accepted
Delegated to: Andi Shyti
Headers show
Series i2c: qup: Add missing unwind goto in qup_i2c_probe() | expand

Commit Message

Shuai Jiang April 18, 2023, 1:56 p.m. UTC
Smatch Warns:
	drivers/i2c/busses/i2c-qup.c:1784 qup_i2c_probe()
	warn: missing unwind goto?

The goto label "fail_runtime" and "fail" will disable qup->pclk, 
but here qup->pclk failed to obtain, in order to be consistent, 
change the direct return to goto label "fail_dma".

Fixes: 10c5a8425968 ("i2c: qup: New bus driver for the Qualcomm QUP I2C controller")
Fixes: 515da746983b ("i2c: qup: add ACPI support")
Signed-off-by: Shuai Jiang <d202180596@hust.edu.cn>
Reviewed-by: Dongliang Mu <dzm91@hust.edu.cn>
---
The issue is found by static analysis and remains untested.
---
 drivers/i2c/busses/i2c-qup.c | 21 ++++++++++++++-------
 1 file changed, 14 insertions(+), 7 deletions(-)

Comments

Shuai Jiang May 5, 2023, 1:18 a.m. UTC | #1
> -----原始邮件-----
> 发件人: "Shuai Jiang" <d202180596@hust.edu.cn>
> 发送时间: 2023-04-18 21:56:12 (星期二)
> 收件人: "Andy Gross" <agross@kernel.org>, "Bjorn Andersson" <andersson@kernel.org>, "Konrad Dybcio" <konrad.dybcio@linaro.org>, "Wolfram Sang" <wsa@kernel.org>, "Ivan T. Ivanov" <iivanov@mm-sol.com>, "Sricharan R" <sricharan@codeaurora.org>, "Naveen Kaje" <nkaje@codeaurora.org>, "Austin Christ" <austinwc@codeaurora.org>
> 抄送: hust-os-kernel-patches@googlegroups.com, "Shuai Jiang" <d202180596@hust.edu.cn>, "Andy Gross" <agross@codeaurora.org>, linux-arm-msm@vger.kernel.org, linux-i2c@vger.kernel.org, linux-kernel@vger.kernel.org
> 主题: [PATCH] i2c: qup: Add missing unwind goto in qup_i2c_probe()
> 
> Smatch Warns:
> 	drivers/i2c/busses/i2c-qup.c:1784 qup_i2c_probe()
> 	warn: missing unwind goto?
> 
> The goto label "fail_runtime" and "fail" will disable qup->pclk, 
> but here qup->pclk failed to obtain, in order to be consistent, 
> change the direct return to goto label "fail_dma".
> 
> Fixes: 10c5a8425968 ("i2c: qup: New bus driver for the Qualcomm QUP I2C controller")
> Fixes: 515da746983b ("i2c: qup: add ACPI support")
> Signed-off-by: Shuai Jiang <d202180596@hust.edu.cn>
> Reviewed-by: Dongliang Mu <dzm91@hust.edu.cn>
> ---
> The issue is found by static analysis and remains untested.
> ---
>  drivers/i2c/busses/i2c-qup.c | 21 ++++++++++++++-------
>  1 file changed, 14 insertions(+), 7 deletions(-)
> 
> diff --git a/drivers/i2c/busses/i2c-qup.c b/drivers/i2c/busses/i2c-qup.c
> index 2e153f2f71b6..78682388e02e 100644
> --- a/drivers/i2c/busses/i2c-qup.c
> +++ b/drivers/i2c/busses/i2c-qup.c
> @@ -1752,16 +1752,21 @@ static int qup_i2c_probe(struct platform_device *pdev)
>  	if (!clk_freq || clk_freq > I2C_MAX_FAST_MODE_PLUS_FREQ) {
>  		dev_err(qup->dev, "clock frequency not supported %d\n",
>  			clk_freq);
> -		return -EINVAL;
> +		ret = -EINVAL;
> +		goto fail_dma;
>  	}
>  
>  	qup->base = devm_platform_ioremap_resource(pdev, 0);
> -	if (IS_ERR(qup->base))
> -		return PTR_ERR(qup->base);
> +	if (IS_ERR(qup->base)) {
> +		ret = PTR_ERR(qup->base);
> +		goto fail_dma;
> +	}
>  
>  	qup->irq = platform_get_irq(pdev, 0);
> -	if (qup->irq < 0)
> -		return qup->irq;
> +	if (qup->irq < 0) {
> +		ret = qup->irq;
> +		goto fail_dma;
> +	}
>  
>  	if (has_acpi_companion(qup->dev)) {
>  		ret = device_property_read_u32(qup->dev,
> @@ -1775,13 +1780,15 @@ static int qup_i2c_probe(struct platform_device *pdev)
>  		qup->clk = devm_clk_get(qup->dev, "core");
>  		if (IS_ERR(qup->clk)) {
>  			dev_err(qup->dev, "Could not get core clock\n");
> -			return PTR_ERR(qup->clk);
> +			ret = PTR_ERR(qup->clk);
> +			goto fail_dma;
>  		}
>  
>  		qup->pclk = devm_clk_get(qup->dev, "iface");
>  		if (IS_ERR(qup->pclk)) {
>  			dev_err(qup->dev, "Could not get iface clock\n");
> -			return PTR_ERR(qup->pclk);
> +			ret = PTR_ERR(qup->pclk);
> +			goto fail_dma;
>  		}
>  		qup_i2c_enable_clocks(qup);
>  		src_clk_freq = clk_get_rate(qup->clk);
> -- 
> 2.25.1

ping?
Dan Carpenter May 5, 2023, 7:42 a.m. UTC | #2
On Fri, May 05, 2023 at 09:18:16AM +0800, d202180596@hust.edu.cn wrote:
> 
> > -----原始邮件-----
> > 发件人: "Shuai Jiang" <d202180596@hust.edu.cn>
> > 发送时间: 2023-04-18 21:56:12 (星期二)
              ^^^^^^^^^^

You can't ping the list when the merge window is open.  You have to wait
for a couple weeks after.

The weeks before and during the merge window are busy and then afterward
maintainers have to deal with the backlog of postponed stuff...

Just be patient.

regards,
dan carpenter
Andi Shyti June 10, 2023, 10:54 a.m. UTC | #3
On Tue, Apr 18, 2023 at 09:56:12PM +0800, Shuai Jiang wrote:
> Smatch Warns:
> 	drivers/i2c/busses/i2c-qup.c:1784 qup_i2c_probe()
> 	warn: missing unwind goto?
> 
> The goto label "fail_runtime" and "fail" will disable qup->pclk, 
> but here qup->pclk failed to obtain, in order to be consistent, 
> change the direct return to goto label "fail_dma".
> 
> Fixes: 10c5a8425968 ("i2c: qup: New bus driver for the Qualcomm QUP I2C controller")
> Fixes: 515da746983b ("i2c: qup: add ACPI support")

These are not the correct Fixes, the correct fix is:

Fixes: 9cedf3b2f099 ("i2c: qup: Add bam dma capabilities")

> Signed-off-by: Shuai Jiang <d202180596@hust.edu.cn>
> Reviewed-by: Dongliang Mu <dzm91@hust.edu.cn>

and

Cc: <stable@vger.kernel.org> # v4.6+

Patch looks good:

Reviewed-by: Andi Shyti <andi.shyti@kernel.org> 

Andi

> ---
> The issue is found by static analysis and remains untested.
> ---
>  drivers/i2c/busses/i2c-qup.c | 21 ++++++++++++++-------
>  1 file changed, 14 insertions(+), 7 deletions(-)
> 
> diff --git a/drivers/i2c/busses/i2c-qup.c b/drivers/i2c/busses/i2c-qup.c
> index 2e153f2f71b6..78682388e02e 100644
> --- a/drivers/i2c/busses/i2c-qup.c
> +++ b/drivers/i2c/busses/i2c-qup.c
> @@ -1752,16 +1752,21 @@ static int qup_i2c_probe(struct platform_device *pdev)
>  	if (!clk_freq || clk_freq > I2C_MAX_FAST_MODE_PLUS_FREQ) {
>  		dev_err(qup->dev, "clock frequency not supported %d\n",
>  			clk_freq);
> -		return -EINVAL;
> +		ret = -EINVAL;
> +		goto fail_dma;
>  	}
>  
>  	qup->base = devm_platform_ioremap_resource(pdev, 0);
> -	if (IS_ERR(qup->base))
> -		return PTR_ERR(qup->base);
> +	if (IS_ERR(qup->base)) {
> +		ret = PTR_ERR(qup->base);
> +		goto fail_dma;
> +	}
>  
>  	qup->irq = platform_get_irq(pdev, 0);
> -	if (qup->irq < 0)
> -		return qup->irq;
> +	if (qup->irq < 0) {
> +		ret = qup->irq;
> +		goto fail_dma;
> +	}
>  
>  	if (has_acpi_companion(qup->dev)) {
>  		ret = device_property_read_u32(qup->dev,
> @@ -1775,13 +1780,15 @@ static int qup_i2c_probe(struct platform_device *pdev)
>  		qup->clk = devm_clk_get(qup->dev, "core");
>  		if (IS_ERR(qup->clk)) {
>  			dev_err(qup->dev, "Could not get core clock\n");
> -			return PTR_ERR(qup->clk);
> +			ret = PTR_ERR(qup->clk);
> +			goto fail_dma;
>  		}
>  
>  		qup->pclk = devm_clk_get(qup->dev, "iface");
>  		if (IS_ERR(qup->pclk)) {
>  			dev_err(qup->dev, "Could not get iface clock\n");
> -			return PTR_ERR(qup->pclk);
> +			ret = PTR_ERR(qup->pclk);
> +			goto fail_dma;
>  		}
>  		qup_i2c_enable_clocks(qup);
>  		src_clk_freq = clk_get_rate(qup->clk);
> -- 
> 2.25.1
>
Wolfram Sang June 14, 2023, 8:45 a.m. UTC | #4
On Tue, Apr 18, 2023 at 09:56:12PM +0800, Shuai Jiang wrote:
> Smatch Warns:
> 	drivers/i2c/busses/i2c-qup.c:1784 qup_i2c_probe()
> 	warn: missing unwind goto?
> 
> The goto label "fail_runtime" and "fail" will disable qup->pclk, 
> but here qup->pclk failed to obtain, in order to be consistent, 
> change the direct return to goto label "fail_dma".
> 
> Fixes: 10c5a8425968 ("i2c: qup: New bus driver for the Qualcomm QUP I2C controller")
> Fixes: 515da746983b ("i2c: qup: add ACPI support")
> Signed-off-by: Shuai Jiang <d202180596@hust.edu.cn>
> Reviewed-by: Dongliang Mu <dzm91@hust.edu.cn>

Applied to for-current, thanks! Thanks Andi, for the proper Fixes tag!
diff mbox series

Patch

diff --git a/drivers/i2c/busses/i2c-qup.c b/drivers/i2c/busses/i2c-qup.c
index 2e153f2f71b6..78682388e02e 100644
--- a/drivers/i2c/busses/i2c-qup.c
+++ b/drivers/i2c/busses/i2c-qup.c
@@ -1752,16 +1752,21 @@  static int qup_i2c_probe(struct platform_device *pdev)
 	if (!clk_freq || clk_freq > I2C_MAX_FAST_MODE_PLUS_FREQ) {
 		dev_err(qup->dev, "clock frequency not supported %d\n",
 			clk_freq);
-		return -EINVAL;
+		ret = -EINVAL;
+		goto fail_dma;
 	}
 
 	qup->base = devm_platform_ioremap_resource(pdev, 0);
-	if (IS_ERR(qup->base))
-		return PTR_ERR(qup->base);
+	if (IS_ERR(qup->base)) {
+		ret = PTR_ERR(qup->base);
+		goto fail_dma;
+	}
 
 	qup->irq = platform_get_irq(pdev, 0);
-	if (qup->irq < 0)
-		return qup->irq;
+	if (qup->irq < 0) {
+		ret = qup->irq;
+		goto fail_dma;
+	}
 
 	if (has_acpi_companion(qup->dev)) {
 		ret = device_property_read_u32(qup->dev,
@@ -1775,13 +1780,15 @@  static int qup_i2c_probe(struct platform_device *pdev)
 		qup->clk = devm_clk_get(qup->dev, "core");
 		if (IS_ERR(qup->clk)) {
 			dev_err(qup->dev, "Could not get core clock\n");
-			return PTR_ERR(qup->clk);
+			ret = PTR_ERR(qup->clk);
+			goto fail_dma;
 		}
 
 		qup->pclk = devm_clk_get(qup->dev, "iface");
 		if (IS_ERR(qup->pclk)) {
 			dev_err(qup->dev, "Could not get iface clock\n");
-			return PTR_ERR(qup->pclk);
+			ret = PTR_ERR(qup->pclk);
+			goto fail_dma;
 		}
 		qup_i2c_enable_clocks(qup);
 		src_clk_freq = clk_get_rate(qup->clk);