Odd code in sound/pcm/channel.c, help with PR?

George Hartzell hartzell at alerce.com
Thu Apr 20 20:28:18 UTC 2006


Ariff Abdullah writes:
 > On Tue, 18 Apr 2006 20:28:29 -0700
 > George Hartzell <hartzell at alerce.com> wrote:
 > > 
 > > I'm trying to get some traction and get sound to work on my ASUS
 > > A8V-MX.  I keep ending up with
 > > 
 > >   pcm0:play:0::dsp0.0: play interrupt timeout, channel dead
 > > 
 > > on my console.
 > > 
 > > I've filed a PR with more details:
 > > 
 > >   http://www.freebsd.org/cgi/query-pr.cgi?pr=95949
 > > 
 > > I've been looking around, trying to understand what might be going
 > > on. I came across the following piece of code in
 > > /usr/src/sys/device/sound/pcm/channel.com, around line 320
 > > 
 > > timeout = (hz * sndbuf_getblksz(bs)) / (sndbuf_getspd(bs) *
 > > sndbuf_getbps(bs)); if (timeout < 1)
 > >         timeout = 1;
 > > timeout = 1;
 > > ret = chn_sleep(c, "pcmwr", timeout);
 > > if (ret == EWOULDBLOCK) {
 > >         count -= timeout;
 > >         ret = 0;
 > > } else if (ret == 0)
 > >         count = hz;
 > > 
 > > It's funny that it goes to the trouble to figure out a timeout value
 > > then seems to unconditionally set it to 1.
 > > 
 > It is indeed, funny :)
 > 
 > > Removing that line doesn't seem to fix my problem, but it still
 > > seems weird.
 > > 
 > > 
 > > And, while I've got your attention, can anyone suggest where I might
 > > look to understand why the buffer doesn't seem to be being emptied?
 > > 
 > It's because the hardware DMA pointer is being lazy and need a good
 > spank on its face.
 > 
 > Replace your sys/dev/sound/pci/via8233.c with:
 > 
 >   http://people.freebsd.org/~ariff/test/via8233.c
 > 
 > As usual, recompile your kernel, or just the modules. If this doesn't
 > work, I still have few more other tricks.
 > 
 > Coincidently, I'm currently investigating DMA incoherency within few
 > drivers, notably this and few others.

I think that you need to get a bigger stick.  I did a
buildkernel/installkernel and still no sound when I cat to /dev/dsp0.0
and I still get the timeouts.

Thanks for the help!

g.



More information about the freebsd-multimedia mailing list