[alsa-devel] [PATCH] pcm: Don't store the state for SND_PCM_STATE_SUSPENDED

Takashi Iwai tiwai at suse.de
Fri May 20 09:27:28 CEST 2016


On Wed, 18 May 2016 10:49:25 +0200,
Takashi Iwai wrote:
> 
> On Wed, 18 May 2016 07:48:15 +0200,
> Shengjiu Wang wrote:
> > 
> > Hi Takashi
> > 
> >   After adding your patch, I find another regression issue.
> > 
> >   The alsa-lib may stop at 
> >   
> >   snd_pcm_write_areas()
> > 		snd_pcm_wait_nocheck()
> > 
> >   with suspend and resume test.
> > 
> >   The reason is that:
> > 
> >   In the beginning of playback, before the snd_pcm_dmix_start() is 
> > called, the system enter suspend. After resume, snd_pcm_direct_resume()
> > update the dmix->state, and dmix->state is 3 (RUNNING, because
> > the dmix->spcm is in RUNNING from snd_pcm_dmix_open()). 
> > 
> >   So in snd_pcm_write_areas() the state is RUNNING, then
> > snd_pcm_start() will never be called, after a while,
> > alsa-lib will stop at the snd_pcm_wait_nocheck() for the kernel
> > will not wake up the timer.
> 
> A good point.  Actually the culprit is that we declare dmix as if it's
> supporting the resume properly.  Even if the resume works in the
> slave, dmix itself can't guarantee the proper resume.  So, we should
> rather drop the whole resume stuff from dmix & co.
> 
> Below is the patch against to the current git tree.  Give it a try.
> 
> 
> thanks,
> 
> Takashi
> 
> ---
> From: Takashi Iwai <tiwai at suse.de>
> Subject: [PATCH] pcm: Remove resume support from dmix & co
> 
> PCM dmix and other plugins inherit the resume behavior from the slave
> PCM.  However, the resume on dmix can't work reliably even if the
> slave PCM may do resume.  The running state of each dmix stream is
> individual and may be PREPARED or RUN_PENDING while the slave PCM is
> already in RUNNING.  And, when the slave PCM is resumed, the whole
> samples that have been already mapped are also played back, even if
> the corresponding dmix stream is still in SUSPENDED.  Such
> inconsistencies can't be avoided as long as we manage each stream
> individually.
> 
> That said, dmix & co can't provide the proper resume support "by
> design".  For aligning with it, we should drop the whole resume code
> and clear the PCM SND_PCM_INFO_RESUME flag.
> 
> Reported-by: Shengjiu Wang <shengjiu.wang at nxp.com>
> Signed-off-by: Takashi Iwai <tiwai at suse.de>

I performed a few tests and they seemed OK.
I'm going to push the fix to git tree.


thanks,

Takashi


More information about the Alsa-devel mailing list