From cec6e41ce094affad3b5f9f5e5aa1f81c66ce682 Mon Sep 17 00:00:00 2001 From: Brent Lu Date: Wed, 15 Jul 2020 21:01:50 +0800 Subject: [PATCH] ASoC: hdac_hdmi: remove cancel_work_sync in runtime suspend A deadlock is identified when there are three contexts running at the same time: - a HDMI jack work which is calling snd_soc_dapm_sync(). - user space is calling snd_pcm_release() to close pcm device. - pm is calling runtime suspend function of HDMI codec driver. By removing the clear_dapm_works() invocation in the hdac_hdmi_runtime_suspend() function, the snd_pcm_release() could always returns from dapm_power_widgets() function call without blocking the hdac_hdmi_jack_dapm_work() work thread or being blocked by the hdac_hdmi_runtime_suspend() function. The purpose of the jack work is to enable/disable the dapm jack pin so it's not necessary to cancel the work in runtime suspend function which is usually called when pcm device is closed. Signed-off-by: Brent Lu Link: https://lore.kernel.org/r/1594818110-786-1-git-send-email-brent.lu@intel.com Signed-off-by: Mark Brown --- sound/soc/codecs/hdac_hdmi.c | 2 -- 1 file changed, 2 deletions(-) diff --git a/sound/soc/codecs/hdac_hdmi.c b/sound/soc/codecs/hdac_hdmi.c index c61cce5..2c1305b 100644 --- a/sound/soc/codecs/hdac_hdmi.c +++ b/sound/soc/codecs/hdac_hdmi.c @@ -2235,8 +2235,6 @@ static int hdac_hdmi_runtime_suspend(struct device *dev) if (!bus) return 0; - clear_dapm_works(hdev); - /* * Power down afg. * codec_read is preferred over codec_write to set the power state. -- 2.7.4