2020-11-01 18:50:17

by Michael Walle

[permalink] [raw]
Subject: [PATCH] clk: fsl-sai: fix memory leak

If the device is removed we don't unregister the composite clock. Fix
that.

Fixes: 9cd10205227c ("clk: fsl-sai: new driver")
Signed-off-by: Michael Walle <[email protected]>
---
drivers/clk/clk-fsl-sai.c | 12 ++++++++++++
1 file changed, 12 insertions(+)

diff --git a/drivers/clk/clk-fsl-sai.c b/drivers/clk/clk-fsl-sai.c
index 0221180a4dd7..1e81c8d8a6fd 100644
--- a/drivers/clk/clk-fsl-sai.c
+++ b/drivers/clk/clk-fsl-sai.c
@@ -68,9 +68,20 @@ static int fsl_sai_clk_probe(struct platform_device *pdev)
if (IS_ERR(hw))
return PTR_ERR(hw);

+ platform_set_drvdata(pdev, hw);
+
return devm_of_clk_add_hw_provider(dev, of_clk_hw_simple_get, hw);
}

+static int fsl_sai_clk_remove(struct platform_device *pdev)
+{
+ struct clk_hw *hw = platform_get_drvdata(pdev);
+
+ clk_hw_unregister_composite(hw);
+
+ return 0;
+}
+
static const struct of_device_id of_fsl_sai_clk_ids[] = {
{ .compatible = "fsl,vf610-sai-clock" },
{ }
@@ -79,6 +90,7 @@ MODULE_DEVICE_TABLE(of, of_fsl_sai_clk_ids);

static struct platform_driver fsl_sai_clk_driver = {
.probe = fsl_sai_clk_probe,
+ .remove = fsl_sai_clk_remove,
.driver = {
.name = "fsl-sai-clk",
.of_match_table = of_fsl_sai_clk_ids,
--
2.20.1


2020-11-05 03:53:08

by Stephen Boyd

[permalink] [raw]
Subject: Re: [PATCH] clk: fsl-sai: fix memory leak

Quoting Michael Walle (2020-11-01 10:48:18)
> diff --git a/drivers/clk/clk-fsl-sai.c b/drivers/clk/clk-fsl-sai.c
> index 0221180a4dd7..1e81c8d8a6fd 100644
> --- a/drivers/clk/clk-fsl-sai.c
> +++ b/drivers/clk/clk-fsl-sai.c
> @@ -68,9 +68,20 @@ static int fsl_sai_clk_probe(struct platform_device *pdev)
> if (IS_ERR(hw))
> return PTR_ERR(hw);
>
> + platform_set_drvdata(pdev, hw);
> +
> return devm_of_clk_add_hw_provider(dev, of_clk_hw_simple_get, hw);
> }
>
> +static int fsl_sai_clk_remove(struct platform_device *pdev)
> +{
> + struct clk_hw *hw = platform_get_drvdata(pdev);
> +
> + clk_hw_unregister_composite(hw);

Should we add a devm_clk_hw_register_composite() API and use it here?
That way we don't need a remove function and devm can be used
throughout.

> +
> + return 0;
> +}
> +
> static const struct of_device_id of_fsl_sai_clk_ids[] = {
> { .compatible = "fsl,vf610-sai-clock" },
> { }

2020-11-05 07:53:09

by Michael Walle

[permalink] [raw]
Subject: Re: [PATCH] clk: fsl-sai: fix memory leak

Am 2020-11-05 01:29, schrieb Stephen Boyd:
> Quoting Michael Walle (2020-11-01 10:48:18)
>> diff --git a/drivers/clk/clk-fsl-sai.c b/drivers/clk/clk-fsl-sai.c
>> index 0221180a4dd7..1e81c8d8a6fd 100644
>> --- a/drivers/clk/clk-fsl-sai.c
>> +++ b/drivers/clk/clk-fsl-sai.c
>> @@ -68,9 +68,20 @@ static int fsl_sai_clk_probe(struct platform_device
>> *pdev)
>> if (IS_ERR(hw))
>> return PTR_ERR(hw);
>>
>> + platform_set_drvdata(pdev, hw);
>> +
>> return devm_of_clk_add_hw_provider(dev, of_clk_hw_simple_get,
>> hw);
>> }
>>
>> +static int fsl_sai_clk_remove(struct platform_device *pdev)
>> +{
>> + struct clk_hw *hw = platform_get_drvdata(pdev);
>> +
>> + clk_hw_unregister_composite(hw);
>
> Should we add a devm_clk_hw_register_composite() API and use it here?
> That way we don't need a remove function and devm can be used
> throughout.

Can do. But does adding a devm_ function qualify for the -stable branch?
Or should I expect to have exactly this patch as a backport there then?

-michael