Date: Thu, 20 Apr 2006 06:47:00 +0800 From: Ariff Abdullah <ariff@FreeBSD.org> To: hartzell@alerce.com Cc: freebsd-multimedia@FreeBSD.org Subject: Re: Odd code in sound/pcm/channel.c, help with PR? Message-ID: <20060420064700.48c63e27.ariff@FreeBSD.org> In-Reply-To: <17477.44637.316536.583639@satchel.alerce.com> References: <17477.44637.316536.583639@satchel.alerce.com>
next in thread | previous in thread | raw e-mail | index | archive | help
--Signature=_Thu__20_Apr_2006_06_47_00_+0800_iCpZzOg57C=/YQIE Content-Type: text/plain; charset=US-ASCII Content-Disposition: inline Content-Transfer-Encoding: quoted-printable On Tue, 18 Apr 2006 20:28:29 -0700 George Hartzell <hartzell@alerce.com> wrote: >=20 > I'm trying to get some traction and get sound to work on my ASUS > A8V-MX. I keep ending up with >=20 > pcm0:play:0::dsp0.0: play interrupt timeout, channel dead >=20 > on my console. >=20 > I've filed a PR with more details: >=20 > http://www.freebsd.org/cgi/query-pr.cgi?pr=3D95949 >=20 > 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 >=20 > timeout =3D (hz * sndbuf_getblksz(bs)) / (sndbuf_getspd(bs) * > sndbuf_getbps(bs)); if (timeout < 1) > timeout =3D 1; > timeout =3D 1; > ret =3D chn_sleep(c, "pcmwr", timeout); > if (ret =3D=3D EWOULDBLOCK) { > count -=3D timeout; > ret =3D 0; > } else if (ret =3D=3D 0) > count =3D hz; >=20 > It's funny that it goes to the trouble to figure out a timeout value > then seems to unconditionally set it to 1. >=20 It is indeed, funny :) > Removing that line doesn't seem to fix my problem, but it still > seems weird. >=20 >=20 > 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? >=20 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. -- Ariff Abdullah FreeBSD --Signature=_Thu__20_Apr_2006_06_47_00_+0800_iCpZzOg57C=/YQIE Content-Type: application/pgp-signature -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.3 (FreeBSD) iD8DBQFERr3nlr+deMUwTNoRAtCBAJ9CzYMVQc7O/9g7mwgwqyfQWjzdlwCfdGD2 qbLMKeUeqB0fSx/ZRjxiOqo= =tt29 -----END PGP SIGNATURE----- --Signature=_Thu__20_Apr_2006_06_47_00_+0800_iCpZzOg57C=/YQIE--
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20060420064700.48c63e27.ariff>