From mboxrd@z Thu Jan 1 00:00:00 1970 From: Takashi Iwai Subject: Re: [PATCH] Tell user that stream to be rewound is suspended Date: Mon, 03 Aug 2009 08:53:29 +0200 Message-ID: References: <1249229684-8292-1-git-send-email-lkundrak@v3.sk> 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 mx1.suse.de (cantor.suse.de [195.135.220.2]) by alsa0.perex.cz (Postfix) with ESMTP id 6E31B245F1 for ; Mon, 3 Aug 2009 08:53:29 +0200 (CEST) In-Reply-To: <1249229684-8292-1-git-send-email-lkundrak@v3.sk> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: alsa-devel-bounces@alsa-project.org Errors-To: alsa-devel-bounces@alsa-project.org To: Lubomir Rintel Cc: stable@kernel.org, Lennart Poettering , linux-kernel@vger.kernel.org, alsa-devel@alsa-project.org List-Id: alsa-devel@alsa-project.org At Sun, 2 Aug 2009 18:14:44 +0200, Lubomir Rintel wrote: > > Return STRPIPE instead of EBADF when userspace attempts to rewind > of forward a stream that was suspended in meanwhile, so that it > can be recovered by snd_pcm_recover(). > > This was causing Pulseaudio to unload the ALSA sink module under a race > condition when it attempted to rewind the stream right after resume from > suspend, before writing to the stream which would cause it to revive the > stream otherwise. Tested to work with Pulseaudio patched to attempt to > snd_pcm_recover() upon receiving an error from snd_pcm_rewind(). > > Signed-off-by: Lubomir Rintel The change looks fine, but I think this isn't for stable kernel since this is actually an ABI extension. For testing, I'm going to apply this to sound-unstable tree for the time being. I'll merge to the main sound tree soon later, though. thanks, Takashi > --- > sound/core/pcm_native.c | 12 ++++++++++++ > 1 files changed, 12 insertions(+), 0 deletions(-) > > diff --git a/sound/core/pcm_native.c b/sound/core/pcm_native.c > index ac2150e..d89c816 100644 > --- a/sound/core/pcm_native.c > +++ b/sound/core/pcm_native.c > @@ -2208,6 +2208,9 @@ static snd_pcm_sframes_t snd_pcm_playback_rewind(struct snd_pcm_substream *subst > case SNDRV_PCM_STATE_XRUN: > ret = -EPIPE; > goto __end; > + case SNDRV_PCM_STATE_SUSPENDED: > + ret = -ESTRPIPE; > + goto __end; > default: > ret = -EBADFD; > goto __end; > @@ -2253,6 +2256,9 @@ static snd_pcm_sframes_t snd_pcm_capture_rewind(struct snd_pcm_substream *substr > case SNDRV_PCM_STATE_XRUN: > ret = -EPIPE; > goto __end; > + case SNDRV_PCM_STATE_SUSPENDED: > + ret = -ESTRPIPE; > + goto __end; > default: > ret = -EBADFD; > goto __end; > @@ -2299,6 +2305,9 @@ static snd_pcm_sframes_t snd_pcm_playback_forward(struct snd_pcm_substream *subs > case SNDRV_PCM_STATE_XRUN: > ret = -EPIPE; > goto __end; > + case SNDRV_PCM_STATE_SUSPENDED: > + ret = -ESTRPIPE; > + goto __end; > default: > ret = -EBADFD; > goto __end; > @@ -2345,6 +2354,9 @@ static snd_pcm_sframes_t snd_pcm_capture_forward(struct snd_pcm_substream *subst > case SNDRV_PCM_STATE_XRUN: > ret = -EPIPE; > goto __end; > + case SNDRV_PCM_STATE_SUSPENDED: > + ret = -ESTRPIPE; > + goto __end; > default: > ret = -EBADFD; > goto __end; > -- > 1.6.2.5 >