Re: [PATCH] ASoC: rsnd: stop all working stream when .remove

Kuninori Morimoto
2017-10-10T08:00:09Z

Hi Takashi-san

> sorry for the late reply. It took time until I digest all pending
> stuff after vacation.

no problem

> > I added my local patch on this mail.
> > Maybe we want to separate this patch into few small patches.
> > but can you review this ?
> > It is including
> > - your patch
> > - snd_pcm_stop() snd_pcm_do_stop() care DISCONNECTED
>
> That needs a bit more investigation.
> When the device is disconnected, not all drivers expect that further
> PCM operations are done for non-existing devices. We might need
> either some flag to allow/prefer the stop-after-disconnection, or
> rethink whether we should actually stop at snd_pcm_dev_disconnect()
> like below.

Thank you for below patch.
I will check/test it

> ---
> diff --git a/sound/core/pcm.c b/sound/core/pcm.c
> index 7eadb7fd8074..054e47ad23ed 100644
> --- a/sound/core/pcm.c
> +++ b/sound/core/pcm.c
> @@ -1152,6 +1152,10 @@ static int snd_pcm_dev_disconnect(struct snd_device *device)
> for (substream = pcm->streams[cidx].substream; substream; substream = substream->next) {
> snd_pcm_stream_lock_irq(substream);
> if (substream->runtime) {
> + if (snd_pcm_running(substream))
> + snd_pcm_stop(substream,
> + SNDRV_PCM_STATE_DISCONNECTED);
> + /* to be sure, set the state unconditionally */
> substream->runtime->status->state = SNDRV_PCM_STATE_DISCONNECTED;
> wake_up(&substream->runtime->sleep);
> wake_up(&substream->runtime->tsleep);