ASoC: ux500: mop500: Fix some refcounted resources issues
There are 2 issues here:
- if one of the 'of_parse_phandle' fails, calling 'mop500_of_node_put()'
is a no-op because the 'mop500_dai_links' structure has not been
initialized yet, so the referenced are not decremented
- The reference stored in 'mop500_dai_links[i].codecs' is refcounted
only once in the probe and must be decremented only once.
Fixes: 39013bd60e
("ASoC: Ux500: Dispose of device nodes correctly")
Signed-off-by: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
Link: https://lore.kernel.org/r/20200512100705.246349-1-christophe.jaillet@wanadoo.fr
Signed-off-by: Mark Brown <broonie@kernel.org>
This commit is contained in:
parent
936b9df7a5
commit
4e8748fcae
|
@ -63,10 +63,11 @@ static void mop500_of_node_put(void)
|
|||
{
|
||||
int i;
|
||||
|
||||
for (i = 0; i < 2; i++) {
|
||||
for (i = 0; i < 2; i++)
|
||||
of_node_put(mop500_dai_links[i].cpus->of_node);
|
||||
of_node_put(mop500_dai_links[i].codecs->of_node);
|
||||
}
|
||||
|
||||
/* Both links use the same codec, which is refcounted only once */
|
||||
of_node_put(mop500_dai_links[0].codecs->of_node);
|
||||
}
|
||||
|
||||
static int mop500_of_probe(struct platform_device *pdev,
|
||||
|
@ -81,7 +82,9 @@ static int mop500_of_probe(struct platform_device *pdev,
|
|||
|
||||
if (!(msp_np[0] && msp_np[1] && codec_np)) {
|
||||
dev_err(&pdev->dev, "Phandle missing or invalid\n");
|
||||
mop500_of_node_put();
|
||||
for (i = 0; i < 2; i++)
|
||||
of_node_put(msp_np[i]);
|
||||
of_node_put(codec_np);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue