diff mbox series

ASoC: core: lock client_mutex while removing link components

Message ID 20190523171201.31104-1-ranjani.sridharan@linux.intel.com (mailing list archive)
State Accepted
Commit 34ac3c3eb8f0c07252ceddf0a22dd240e5c91ccb
Headers show
Series ASoC: core: lock client_mutex while removing link components | expand

Commit Message

Ranjani Sridharan May 23, 2019, 5:12 p.m. UTC
Removing link components results in topology unloading. So,
acquire the client_mutex before removing components in
soc_remove_link_components. This will prevent the lockdep warning
seen when dai links are removed during topology removal.

Signed-off-by: Ranjani Sridharan <ranjani.sridharan@linux.intel.com>
---
 sound/soc/soc-core.c | 2 ++
 1 file changed, 2 insertions(+)

Comments

Pierre-Louis Bossart May 23, 2019, 5:20 p.m. UTC | #1
On 5/23/19 12:12 PM, Ranjani Sridharan wrote:
> Removing link components results in topology unloading. So,
> acquire the client_mutex before removing components in
> soc_remove_link_components. This will prevent the lockdep warning
> seen when dai links are removed during topology removal.
> 
> Signed-off-by: Ranjani Sridharan <ranjani.sridharan@linux.intel.com>

GitHub issue: https://github.com/thesofproject/linux/issues/967 for more 
details.

> ---
>   sound/soc/soc-core.c | 2 ++
>   1 file changed, 2 insertions(+)
> 
> diff --git a/sound/soc/soc-core.c b/sound/soc/soc-core.c
> index ce8c057bcd5b..bbb52fbd195e 100644
> --- a/sound/soc/soc-core.c
> +++ b/sound/soc/soc-core.c
> @@ -1010,12 +1010,14 @@ static void soc_remove_link_components(struct snd_soc_card *card,
>   	struct snd_soc_component *component;
>   	struct snd_soc_rtdcom_list *rtdcom;
>   
> +	mutex_lock(&client_mutex);
>   	for_each_rtdcom(rtd, rtdcom) {
>   		component = rtdcom->component;
>   
>   		if (component->driver->remove_order == order)
>   			soc_remove_component(component);
>   	}
> +	mutex_unlock(&client_mutex);
>   }
>   
>   static void soc_remove_dai_links(struct snd_soc_card *card)
>
diff mbox series

Patch

diff --git a/sound/soc/soc-core.c b/sound/soc/soc-core.c
index ce8c057bcd5b..bbb52fbd195e 100644
--- a/sound/soc/soc-core.c
+++ b/sound/soc/soc-core.c
@@ -1010,12 +1010,14 @@  static void soc_remove_link_components(struct snd_soc_card *card,
 	struct snd_soc_component *component;
 	struct snd_soc_rtdcom_list *rtdcom;
 
+	mutex_lock(&client_mutex);
 	for_each_rtdcom(rtd, rtdcom) {
 		component = rtdcom->component;
 
 		if (component->driver->remove_order == order)
 			soc_remove_component(component);
 	}
+	mutex_unlock(&client_mutex);
 }
 
 static void soc_remove_dai_links(struct snd_soc_card *card)