[PATCH v2 2/8] firmware: imx: scu-irq: Free mailbox client on failure at imx_scu_enable_general_irq_channel()

Peng Fan posted 8 patches 2 months ago
[PATCH v2 2/8] firmware: imx: scu-irq: Free mailbox client on failure at imx_scu_enable_general_irq_channel()
Posted by Peng Fan 2 months ago
The IRQ mailbox is an optional channel and does not need to be kept until
driver removal when an error occurs. Free the allocated memory in the
error path.

Add 'goto free_cl' when mbox_request_channel_byname() fails, to keep free
at one place.

Signed-off-by: Peng Fan <peng.fan@nxp.com>
---
 drivers/firmware/imx/imx-scu-irq.c | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/drivers/firmware/imx/imx-scu-irq.c b/drivers/firmware/imx/imx-scu-irq.c
index f2b902e95b738fae90af9cbe54da4f488219906f..d6fd04404e2a3113a6d22b1a580e6c0ac48f5975 100644
--- a/drivers/firmware/imx/imx-scu-irq.c
+++ b/drivers/firmware/imx/imx-scu-irq.c
@@ -219,8 +219,7 @@ int imx_scu_enable_general_irq_channel(struct device *dev)
 	if (IS_ERR(ch)) {
 		ret = PTR_ERR(ch);
 		dev_err(dev, "failed to request mbox chan gip3, ret %d\n", ret);
-		devm_kfree(dev, cl);
-		return ret;
+		goto free_cl;
 	}
 
 	INIT_WORK(&imx_sc_irq_work, imx_scu_irq_work_handler);
@@ -255,6 +254,8 @@ int imx_scu_enable_general_irq_channel(struct device *dev)
 
 free_ch:
 	mbox_free_channel(ch);
+free_cl:
+	devm_kfree(dev, cl);
 
 	return ret;
 }

-- 
2.37.1
Re: [PATCH v2 2/8] firmware: imx: scu-irq: Free mailbox client on failure at imx_scu_enable_general_irq_channel()
Posted by Frank Li 2 months ago
On Fri, Oct 17, 2025 at 09:56:25AM +0800, Peng Fan wrote:
> The IRQ mailbox is an optional channel and does not need to be kept until
> driver removal when an error occurs. Free the allocated memory in the
> error path.
>
> Add 'goto free_cl' when mbox_request_channel_byname() fails, to keep free
> at one place.
>
> Signed-off-by: Peng Fan <peng.fan@nxp.com>
> ---

Reviewed-by: Frank Li <Frank.Li@nxp.com>

>  drivers/firmware/imx/imx-scu-irq.c | 5 +++--
>  1 file changed, 3 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/firmware/imx/imx-scu-irq.c b/drivers/firmware/imx/imx-scu-irq.c
> index f2b902e95b738fae90af9cbe54da4f488219906f..d6fd04404e2a3113a6d22b1a580e6c0ac48f5975 100644
> --- a/drivers/firmware/imx/imx-scu-irq.c
> +++ b/drivers/firmware/imx/imx-scu-irq.c
> @@ -219,8 +219,7 @@ int imx_scu_enable_general_irq_channel(struct device *dev)
>  	if (IS_ERR(ch)) {
>  		ret = PTR_ERR(ch);
>  		dev_err(dev, "failed to request mbox chan gip3, ret %d\n", ret);
> -		devm_kfree(dev, cl);
> -		return ret;
> +		goto free_cl;
>  	}
>
>  	INIT_WORK(&imx_sc_irq_work, imx_scu_irq_work_handler);
> @@ -255,6 +254,8 @@ int imx_scu_enable_general_irq_channel(struct device *dev)
>
>  free_ch:
>  	mbox_free_channel(ch);
> +free_cl:
> +	devm_kfree(dev, cl);
>
>  	return ret;
>  }
>
> --
> 2.37.1
>