[alsa-devel] Question about device recovery when under/over run error case

Takashi Iwai tiwai at suse.de
Mon Jan 18 09:29:13 CET 2016


On Mon, 18 Jan 2016 07:04:03 +0100,
Kuninori Morimoto wrote:
> 
> Hi Sakamoto-san
> 
> Thank you for your feedback
> 
> > > Our sound device needs recovery if under/over run error happen.
> > > Basically, this "recovery" means "restart hardware".
> > > But, in such case, who should recovers sound device, Kernel or Userland ?
> > >
> > > Current our sound driver recovers it by kernel automatically.
> > > (But I need do work more for it)
> > 
> > I think you should not recover it in kernel space, because 'hw_ptr' in
> > mapped page includes values unexpected by userspace application. (The
> > value may suddenly jump up to unexpected value after recovered.)
> > 
> > What driver in kernel land is to notify XRUN to the applications in
> > your case. If recovering processing includes event waiting, it should
> > not be executed in interrupt context.
> > 
> > > We considered that userland should know it, or, run it by himself (?)
> > > If userland should do it, which function should be called to announce
> > > error to userland from kernel ?
> > 
> > Userspace can get to know the XRUN state by calling some APIs. Then,
> > it can recover PCM substream by executing SNDRV_PCM_IOCTL_PREPARE
> > ioctl.
> 
> I think we can use snd_pcm_stop_xrun() for this purpose.

Right.  But beware of locking by this function.  Unlike snd_pcm_stop()
this function takes the stream lock by itself.


Takashi


More information about the Alsa-devel mailing list