From mboxrd@z Thu Jan 1 00:00:00 1970 From: Takashi Iwai Subject: Re: [PATCH] pcm: Don't store the state for SND_PCM_STATE_SUSPENDED Date: Fri, 20 May 2016 09:27:28 +0200 Message-ID: References: <1462866346-11878-1-git-send-email-shengjiu.wang@freescale.com> Mime-Version: 1.0 (generated by SEMI 1.14.6 - "Maruoka") Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: Received: from mx2.suse.de (mx2.suse.de [195.135.220.15]) by alsa0.perex.cz (Postfix) with ESMTP id 0E4602606E3 for ; Fri, 20 May 2016 09:27:30 +0200 (CEST) In-Reply-To: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: alsa-devel-bounces@alsa-project.org Sender: alsa-devel-bounces@alsa-project.org To: Shengjiu Wang Cc: "alsa-devel@alsa-project.org" List-Id: alsa-devel@alsa-project.org 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 > 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 > Signed-off-by: Takashi Iwai I performed a few tests and they seemed OK. I'm going to push the fix to git tree. thanks, Takashi