[alsa-devel] Driver code with mpc5200 pointer problem.

Takashi Iwai tiwai at suse.de
Tue Apr 28 14:02:01 CEST 2009


At Tue, 28 Apr 2009 13:30:09 +0200 (CEST),
Jaroslav Kysela wrote:
> 
> On Tue, 28 Apr 2009, Takashi Iwai wrote:
> 
> > At Tue, 28 Apr 2009 12:15:25 +0200 (CEST),
> > Jaroslav Kysela wrote:
> >>
> >> On Tue, 28 Apr 2009, Takashi Iwai wrote:
> >>
> >>> Well, I think it'd be better, at this moment for 2.6.30, to allow
> >>> problematic drivers to skip the jiffies check.  Adding the fundamental
> >>> change at this late stage is bad, especially if the change wasn't
> >>> tested much by many others and has an influence on user-side API.
> >>>
> >>> So, as I proposed, we can simply add the pcm info check, and add
> >>> BATCH flag to needed drivers.  Of course, it still requires some
> >>> more testing, but basically it'll take back to the old behavior and
> >>> should be safer.
> >>>
> >>> Meanwhile, applying the delay account patch now for 2.6.31 should be
> >>> good (ealier is better).  It doesn't conflict with the info flag
> >>> check, so we can work parallel.
> >>
> >> Could we just add the runtime->delay variable without touching other code
> >> (pcm status), to correct the jiffies based check now?
> >
> > That's possible, of course.
> >
> >> It seems like a good
> >> step forward to me and the lowlevel drivers will be more prepared for next
> >> PCM midlevel code changes.
> >
> > Well, but I guess providing the proper FIFO size isn't trivial to each
> > driver.  There are many devices, as Mark suggested, which may be
> > broken right now, and we can't determine all h/w specs and test them.
> >
> > OTOH, adding INFO_BATCH is fairly easy, because it can be found from
> > the pointer callback implementation of each driver.  On these devices,
> > the jiffies check doesn't help much anyway because it cannot update
> > the hwptr any other than the period size.  So, skipping jiffies check
> > is logically correct as a regression fix.
> 
> I don't see much difference between adding INFO_BATCH and adding 
> runtime->delay = (runtime->period_size)-1 to avoid jiffies check for one 
> period to these drivers (with some notice to author of the driver to 
> correct this value).

INFO_BATCH is the correct flag for such drivers.  They should have the
flag, independent from the fix.

Also, setting -1 to runtime->delay is not what intended for the delay
accounting.  Starting from a (sort of) abuse doesn't sound good...

> INFO_BATCH is currently in:
> 
> /soc/fsl/mpc5200_psc_i2s.c
> /soc/au1x/dbdma2.c
> /soc/sh/dma-sh7760.c
> /usb/usbaudio.c (which works with the current jiffies check at least for
>  		 44100+ rates)
> 
> Another (much cleaner) possibility is to make jiffies check conditional to 
> xrun_check() for 2.6.30 and do not bother with the INFO_BATCH flag.
> 
> Jiffies check helped me to debug HDA/intel8x0 pointer problems but cannot 
> be triggered until driver is really buggy - the HDA/intel8x0 driver should 
> be fixed now (I know about one intel8x0 pointer problem to this time which 
> triggers this check, but there is still something wrong with returned 
> hardware pointer because audio clicks anyway - no regression from previous 
> state).

That makes sense, too.  Maybe even safer.


Takashi


More information about the Alsa-devel mailing list