All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] ASoC: dpcm: Make BE prepare possible in suspend state
@ 2015-10-28  2:15 ` Koro Chen
  0 siblings, 0 replies; 7+ messages in thread
From: Koro Chen @ 2015-10-28  2:15 UTC (permalink / raw)
  To: broonie, tiwai
  Cc: alsa-devel, srv_heupstream, s.hauer, linux-kernel,
	liam.r.girdwood, Koro Chen, linux-mediatek, linux-arm-kernel

During suspend/resume, there is a flow that if a driver does not support
SNDRV_PCM_INFO_RESUME, it will fail at snd_pcm_resume(), and user space
can then issue SNDRV_PCM_IOCTL_PREPARE to let audio continue to play.

However, in dpcm_be_dai_prepare() it only allows BEs to be prepared
in state SND_SOC_DPCM_STATE_HW_PARAMS or SND_SOC_DPCM_STATE_STOP.
The BE state will then stay in SND_SOC_DPCM_STATE_SUSPEND, consequently
dpcm_be_dai_shutdown() is skipped in the end of playback and
be_substream->runtime is not cleared while this runtime is actually freed
by snd_pcm_detach_substream(). If another suspend comes, a NULL pointer
dereference will happen in snd_pcm_suspend() when accessing
BE substream's runtime.

Signed-off-by: Koro Chen <koro.chen@mediatek.com>
---
 sound/soc/soc-pcm.c |    3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/sound/soc/soc-pcm.c b/sound/soc/soc-pcm.c
index 3173958..5c41a58 100644
--- a/sound/soc/soc-pcm.c
+++ b/sound/soc/soc-pcm.c
@@ -2117,7 +2117,8 @@ int dpcm_be_dai_prepare(struct snd_soc_pcm_runtime *fe, int stream)
 			continue;
 
 		if ((be->dpcm[stream].state != SND_SOC_DPCM_STATE_HW_PARAMS) &&
-		    (be->dpcm[stream].state != SND_SOC_DPCM_STATE_STOP))
+		    (be->dpcm[stream].state != SND_SOC_DPCM_STATE_STOP) &&
+		    (be->dpcm[stream].state != SND_SOC_DPCM_STATE_SUSPEND))
 			continue;
 
 		dev_dbg(be->dev, "ASoC: prepare BE %s\n",
-- 
1.7.9.5

^ permalink raw reply related	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2015-10-29  0:17 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-10-28  2:15 [PATCH] ASoC: dpcm: Make BE prepare possible in suspend state Koro Chen
2015-10-28  2:15 ` Koro Chen
2015-10-28  2:15 ` Koro Chen
2015-10-28  8:34 ` Liam Girdwood
2015-10-28  8:34   ` Liam Girdwood
2015-10-28  8:34   ` Liam Girdwood
2015-10-29  0:16 ` Applied "ASoC: dpcm: Make BE prepare possible in suspend state" to the asoc tree Mark Brown

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.