[alsa-devel] [PATCH v2 0/3] ASoC: fsl: audmix: remove "model" attribute and fix ref leaks
The latest audmix patch-set (v5) had the "model" attribute removed as requested by Nicolin Chen, but looks like (v4) version of DAI driver reached "for-next" branch - fix this by removing "model" attribute. Asside of this fix object reference leaks in machine probe reported by Julia Lawall.
Viorel Suman (3): ASoC: fsl_audmix: remove "model" attribute dt-bindings: fsl,audmix: remove "model" attribute ASoC: imx-audmix: fix object reference leaks in probe
Changes since V1: a) Removed "model" attribute from dt-bindings documentation b) Adressed Daniel's comments
.../devicetree/bindings/sound/fsl,audmix.txt | 4 -- sound/soc/fsl/fsl_audmix.c | 43 ++++++++++++---------- sound/soc/fsl/imx-audmix.c | 4 ++ 3 files changed, 27 insertions(+), 24 deletions(-)
Use "of_device_id.data" to specify the machine driver instead of "model" DTS attribute.
Signed-off-by: Viorel Suman viorel.suman@nxp.com --- sound/soc/fsl/fsl_audmix.c | 43 +++++++++++++++++++++++-------------------- 1 file changed, 23 insertions(+), 20 deletions(-)
diff --git a/sound/soc/fsl/fsl_audmix.c b/sound/soc/fsl/fsl_audmix.c index dabde03..dc802d5 100644 --- a/sound/soc/fsl/fsl_audmix.c +++ b/sound/soc/fsl/fsl_audmix.c @@ -445,13 +445,29 @@ static const struct regmap_config fsl_audmix_regmap_config = { .cache_type = REGCACHE_FLAT, };
+static const struct of_device_id fsl_audmix_ids[] = { + { + .compatible = "fsl,imx8qm-audmix", + .data = "imx-audmix", + }, + { /* sentinel */ } +}; +MODULE_DEVICE_TABLE(of, fsl_audmix_ids); + static int fsl_audmix_probe(struct platform_device *pdev) { struct fsl_audmix *priv; struct resource *res; + const char *mdrv; + const struct of_device_id *of_id; void __iomem *regs; int ret; - const char *sprop; + + of_id = of_match_device(fsl_audmix_ids, &pdev->dev); + if (!of_id || !of_id->data) + return -EINVAL; + + mdrv = of_id->data;
priv = devm_kzalloc(&pdev->dev, sizeof(*priv), GFP_KERNEL); if (!priv) @@ -487,19 +503,12 @@ static int fsl_audmix_probe(struct platform_device *pdev) return ret; }
- sprop = of_get_property(pdev->dev.of_node, "model", NULL); - if (sprop) { - priv->pdev = platform_device_register_data(&pdev->dev, sprop, 0, - NULL, 0); - if (IS_ERR(priv->pdev)) { - ret = PTR_ERR(priv->pdev); - dev_err(&pdev->dev, - "failed to register platform %s: %d\n", sprop, - ret); - } - } else { - dev_err(&pdev->dev, "[model] attribute missing.\n"); - ret = -EINVAL; + priv->pdev = platform_device_register_data(&pdev->dev, mdrv, 0, NULL, + 0); + if (IS_ERR(priv->pdev)) { + ret = PTR_ERR(priv->pdev); + dev_err(&pdev->dev, "failed to register platform %s: %d\n", + mdrv, ret); }
return ret; @@ -553,12 +562,6 @@ static const struct dev_pm_ops fsl_audmix_pm = { pm_runtime_force_resume) };
-static const struct of_device_id fsl_audmix_ids[] = { - { .compatible = "fsl,imx8qm-audmix", }, - { /* sentinel */ } -}; -MODULE_DEVICE_TABLE(of, fsl_audmix_ids); - static struct platform_driver fsl_audmix_driver = { .probe = fsl_audmix_probe, .remove = fsl_audmix_remove,
On Tue, Apr 09, 2019 at 11:27:39AM +0000, Viorel Suman wrote:
Use "of_device_id.data" to specify the machine driver instead of "model" DTS attribute.
Signed-off-by: Viorel Suman viorel.suman@nxp.com
Acked-by: Nicolin Chen nicoleotsuka@gmail.com
sound/soc/fsl/fsl_audmix.c | 43 +++++++++++++++++++++++-------------------- 1 file changed, 23 insertions(+), 20 deletions(-)
- priv->pdev = platform_device_register_data(&pdev->dev, mdrv, 0, NULL,
0);
Would you please send a separate patch to replace "pdev->dev"?
Hi Nicolin,
On Wed, Apr 10, 2019 at 7:30 AM Nicolin Chen nicoleotsuka@gmail.com wrote:
On Tue, Apr 09, 2019 at 11:27:39AM +0000, Viorel Suman wrote:
Use "of_device_id.data" to specify the machine driver instead of "model" DTS attribute.
Signed-off-by: Viorel Suman viorel.suman@nxp.com
Acked-by: Nicolin Chen nicoleotsuka@gmail.com
sound/soc/fsl/fsl_audmix.c | 43 +++++++++++++++++++++++-------------------- 1 file changed, 23 insertions(+), 20 deletions(-)
priv->pdev = platform_device_register_data(&pdev->dev, mdrv, 0, NULL,
0);
Would you please send a separate patch to replace "pdev->dev"?
I am not sure exactly how to explain this change in the commit message. It does make code easier to read and avoids dereferencing pdev pointer each time.
Is it enough for commit description?
thanks, Daniel.
On Wed, Apr 10, 2019 at 09:20:29AM +0300, Daniel Baluta wrote:
Hi Nicolin,
On Wed, Apr 10, 2019 at 7:30 AM Nicolin Chen nicoleotsuka@gmail.com wrote:
On Tue, Apr 09, 2019 at 11:27:39AM +0000, Viorel Suman wrote:
Use "of_device_id.data" to specify the machine driver instead of "model" DTS attribute.
Signed-off-by: Viorel Suman viorel.suman@nxp.com
Acked-by: Nicolin Chen nicoleotsuka@gmail.com
sound/soc/fsl/fsl_audmix.c | 43 +++++++++++++++++++++++-------------------- 1 file changed, 23 insertions(+), 20 deletions(-)
priv->pdev = platform_device_register_data(&pdev->dev, mdrv, 0, NULL,
0);
Would you please send a separate patch to replace "pdev->dev"?
I am not sure exactly how to explain this change in the commit message. It does make code easier to read and avoids dereferencing pdev pointer each time.
Is it enough for commit description?
You mean this? https://lore.kernel.org/patchwork/patch/862610/
On Wed, Apr 10, 2019 at 9:37 AM Nicolin Chen nicoleotsuka@gmail.com wrote:
On Wed, Apr 10, 2019 at 09:20:29AM +0300, Daniel Baluta wrote:
Hi Nicolin,
On Wed, Apr 10, 2019 at 7:30 AM Nicolin Chen nicoleotsuka@gmail.com wrote:
On Tue, Apr 09, 2019 at 11:27:39AM +0000, Viorel Suman wrote:
Use "of_device_id.data" to specify the machine driver instead of "model" DTS attribute.
Signed-off-by: Viorel Suman viorel.suman@nxp.com
Acked-by: Nicolin Chen nicoleotsuka@gmail.com
sound/soc/fsl/fsl_audmix.c | 43 +++++++++++++++++++++++-------------------- 1 file changed, 23 insertions(+), 20 deletions(-)
priv->pdev = platform_device_register_data(&pdev->dev, mdrv, 0, NULL,
0);
Would you please send a separate patch to replace "pdev->dev"?
I am not sure exactly how to explain this change in the commit message. It does make code easier to read and avoids dereferencing pdev pointer each time.
Is it enough for commit description?
You mean this? https://lore.kernel.org/patchwork/patch/862610/
Yes! Thanks.
Hi Nicolin,
On Ma, 2019-04-09 at 21:29 -0700, Nicolin Chen wrote:
WARNING: This email was created outside of NXP. DO NOT CLICK links or attachments unless you recognize the sender and know the content is safe.
On Tue, Apr 09, 2019 at 11:27:39AM +0000, Viorel Suman wrote:
Use "of_device_id.data" to specify the machine driver instead of "model" DTS attribute.
Signed-off-by: Viorel Suman viorel.suman@nxp.com
Acked-by: Nicolin Chen nicoleotsuka@gmail.com
sound/soc/fsl/fsl_audmix.c | 43 +++++++++++++++++++++++-----------
1 file changed, 23 insertions(+), 20 deletions(-)
+ priv->pdev = platform_device_register_data(&pdev->dev, mdrv, 0, NULL, + 0);
Would you please send a separate patch to replace "pdev->dev"?
Thank you for review. Yes, will send V3.
/Viorel
On Wed, Apr 10, 2019 at 10:34:57AM +0000, Viorel Suman wrote:
Hi Nicolin,
On Ma, 2019-04-09 at 21:29 -0700, Nicolin Chen wrote:
WARNING: This email was created outside of NXP. DO NOT CLICK links or attachments unless you recognize the sender and know the content is safe.
On Tue, Apr 09, 2019 at 11:27:39AM +0000, Viorel Suman wrote:
Use "of_device_id.data" to specify the machine driver instead of "model" DTS attribute.
Signed-off-by: Viorel Suman viorel.suman@nxp.com
Acked-by: Nicolin Chen nicoleotsuka@gmail.com
sound/soc/fsl/fsl_audmix.c | 43 +++++++++++++++++++++++-----------
1 file changed, 23 insertions(+), 20 deletions(-)
+ priv->pdev = platform_device_register_data(&pdev->dev, mdrv, 0, NULL, + 0);
Would you please send a separate patch to replace "pdev->dev"?
Thank you for review. Yes, will send V3.
Ah...when I said that, I was literally saying that you should send a separate patch individually, not resend the series.
Now I see you sent v3/v4 almost at the same time as "Applied" mails from Mark. And I am totally confused which version got applied....
Please rebase your local tree and find out which version got applied and then send the diff with a separate patch.
Thanks Nicolin
Remove "model" attribute.
Signed-off-by: Viorel Suman viorel.suman@nxp.com --- Documentation/devicetree/bindings/sound/fsl,audmix.txt | 4 ---- 1 file changed, 4 deletions(-)
diff --git a/Documentation/devicetree/bindings/sound/fsl,audmix.txt b/Documentation/devicetree/bindings/sound/fsl,audmix.txt index 45f807e..840b7e0 100644 --- a/Documentation/devicetree/bindings/sound/fsl,audmix.txt +++ b/Documentation/devicetree/bindings/sound/fsl,audmix.txt @@ -38,9 +38,6 @@ Device driver required properties: to SAI interfaces to be provided, the first SAI in the list being used to route the AUDMIX output.
- - model : Must contain machine driver name which will configure - and instantiate the appropriate audio card. - Device driver configuration example: ====================================== audmix: audmix@59840000 { @@ -50,5 +47,4 @@ Device driver configuration example: clock-names = "ipg"; power-domains = <&pd_audmix>; dais = <&sai4>, <&sai5>; - model = "imx-audmix"; };
On Tue, Apr 09, 2019 at 11:27:40AM +0000, Viorel Suman wrote:
Remove "model" attribute.
Signed-off-by: Viorel Suman viorel.suman@nxp.com
Acked-by: Nicolin Chen nicoleotsuka@gmail.com
Release the reference to the underlying device taken by of_find_device_by_node() call.
Signed-off-by: Viorel Suman viorel.suman@nxp.com Reported-by: Julia Lawall Julia.Lawall@lip6.fr --- sound/soc/fsl/imx-audmix.c | 4 ++++ 1 file changed, 4 insertions(+)
diff --git a/sound/soc/fsl/imx-audmix.c b/sound/soc/fsl/imx-audmix.c index 7983bd3..9aaf3e5 100644 --- a/sound/soc/fsl/imx-audmix.c +++ b/sound/soc/fsl/imx-audmix.c @@ -171,6 +171,7 @@ static int imx_audmix_probe(struct platform_device *pdev) np->full_name); return -EINVAL; } + put_device(&audmix_pdev->dev);
num_dai = of_count_phandle_with_args(audmix_np, "dais", NULL); if (num_dai != FSL_AUDMIX_MAX_DAIS) { @@ -216,6 +217,7 @@ static int imx_audmix_probe(struct platform_device *pdev) dev_err(&pdev->dev, "failed to find SAI platform device\n"); return -EINVAL; } + put_device(&cpu_pdev->dev);
dai_name = devm_kasprintf(&pdev->dev, GFP_KERNEL, "%s%s", fe_name_pref, args.np->full_name + 1); @@ -280,6 +282,8 @@ static int imx_audmix_probe(struct platform_device *pdev) dev_err(&pdev->dev, "failed to find SAI platform device\n"); return -EINVAL; } + put_device(&cpu_pdev->dev); + priv->cpu_mclk = devm_clk_get(&cpu_pdev->dev, "mclk1"); if (IS_ERR(priv->cpu_mclk)) { ret = PTR_ERR(priv->cpu_mclk);
On Tue, Apr 09, 2019 at 11:27:42AM +0000, Viorel Suman wrote:
Release the reference to the underlying device taken by of_find_device_by_node() call.
Signed-off-by: Viorel Suman viorel.suman@nxp.com Reported-by: Julia Lawall Julia.Lawall@lip6.fr
Acked-by: Nicolin Chen nicoleotsuka@gmail.com
participants (3)
-
Daniel Baluta
-
Nicolin Chen
-
Viorel Suman