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