tree e876e98d524416e28e8d53598555a3b83f82d6a5
parent 580dff3636d08ed12cb5d5db2fd895cbeffd0fd5
author Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> 1582095412 +0900
committer Mark Brown <broonie@kernel.org> 1582579112 +0000
gpgsig -----BEGIN PGP SIGNATURE-----
 
 iQFHBAABCgAxFiEEreZoqmdXGLWf4p/qJNaLcl1Uh9AFAl5UPagTHGJyb29uaWVA
 a2VybmVsLm9yZwAKCRAk1otyXVSH0HjUB/wJwnlLVsx2CrSVXEn+Cur5fI8agvcW
 ylUu1HzayORCweJAn93abPe2gnXWdCRa+7r+fx3yWyT5G+enjjYmF7sDQnZ+t4mq
 o5JKbznJOJNaT+9s/4VExVo9R2DsNTM0UG+OwD+ouRYJrMJDAoZTplCPoZAXtE3n
 fpfqkmcvXplfT+V6HpIfOv8XcpUDNgKx3qxB3D+1h8pRLx7PELcTw9RB945A8Id0
 z/iGdT0n0fC+LBxYKC01SsZlq7pjN9TorBtrjmYaQ/OaMhg7uBWrwRUZBBxZVT8x
 0uVSJRgZcc7f8b6NpLxLENF8zCLUZA0ySHy7hfq9cImFbqUMx1PGSnGX
 =M/5C
 -----END PGP SIGNATURE-----

ASoC: soc-pcm: move dpcm_path_put() to soc-pcm.c

dpcm_path_put() (A) is calling kfree(*list).
The freed list is created by dapm_widget_list_create() (B) which is called
from snd_soc_dapm_dai_get_connected_widgets() (C) which is called from
dpcm_path_get() (D).

(B)	dapm_widget_list_create(**list, ...)
	{
		...
=>		*list = kzalloc();
		...
	}

(C)	snd_soc_dapm_dai_get_connected_widgets(..., **list, ...)
	{
		...
		dapm_widget_list_create(list, ...);
		...
	}

(D)	dpcm_path_get(..., **list)
	{
		...
		snd_soc_dapm_dai_get_connected_widgets(..., list, ...);
		...
	}

(A)	dpcm_path_put(**list)
	{
=>		kfree(*list);
	}

This kind of unbalance code is very difficult to read/understand.
To avoid this issue, this patch adds each missing paired function
dapm_widget_list_free()         for dapm_widget_list_create() (B), and
snd_soc_dapm_dai_free_widgets() for snd_soc_dapm_dai_get_connected_widgets() (C).

This patch uses these, and moves dpcm_path_put() next to dpcm_path_get().

Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Link: https://lore.kernel.org/r/87a75fjc9q.wl-kuninori.morimoto.gx@renesas.com
Signed-off-by: Mark Brown <broonie@kernel.org>
