2004-03-22 15:30:34

by Henrik Persson

[permalink] [raw]
Subject: VIA VT82C686 AC97 hickup

Hi.

For a month or two I've been experiencing some trouble with the VIA AC97
sound card attached to my motherboard.. The machine in question is
running smoothly and playing mp3s and movies and then all of a sudden
(usually when it has been on for about 10 days or so) this will flood
dmesg and /var/log/messages:

Mar 22 16:22:43 eurisco kernel: Assertion failed! chan->is_active ==
sg_active(chan->iobase),via82cxxx_audio.c,via_chan_maybe_start,line=1388

Any ideas?

.config and lspci output attached.

Thanks.

--
Henrik Persson <[email protected]>


Attachments:
eurisco.config (16.12 kB)
eurisco.lspci (7.09 kB)
Download all attachments

2004-04-30 12:18:15

by Marcelo Tosatti

[permalink] [raw]
Subject: Re: VIA VT82C686 AC97 hickup

On Mon, Mar 22, 2004 at 04:29:36PM +0100, Henrik Persson wrote:
> Hi.
>
> For a month or two I've been experiencing some trouble with the VIA AC97
> sound card attached to my motherboard.. The machine in question is
> running smoothly and playing mp3s and movies and then all of a sudden
> (usually when it has been on for about 10 days or so) this will flood
> dmesg and /var/log/messages:
>
> Mar 22 16:22:43 eurisco kernel: Assertion failed! chan->is_active ==
> sg_active(chan->iobase),via82cxxx_audio.c,via_chan_maybe_start,line=1388
>
> Any ideas?

I'm always seeing this too in my box (which is running 2.6.0).

Jeff, Alan, the assert seem erroneous?

/**
* via_chan_maybe_start - Initiate audio hardware DMA operation
* @chan: Channel whose DMA is to be started
*
* Initiate DMA operation, if the DMA engine for the given
* channel @chan is not already active.
*/

static inline void via_chan_maybe_start (struct via_channel *chan)
{
assert (chan->is_active == sg_active(chan->iobase));

and

static int sg_active (long iobase)
{
u8 tmp = inb (iobase + VIA_PCM_STATUS);
if ((tmp & VIA_SGD_STOPPED) || (tmp & VIA_SGD_PAUSED)) {
printk(KERN_WARNING "via82cxxx warning: SG stopped or paused\n");
return 0;
}
if (tmp & VIA_SGD_ACTIVE)
return 1;
return 0;
}

The driver works normally, even with the assert happening:

via_audio: ignoring drain playback error -11
via_audio: ignoring drain playback error -11
via_audio: ignoring drain playback error -11
Assertion failed! chan->is_active == sg_active(chan->iobase),sound/oss/via82cxxx _audio.c,via_chan_maybe_start,line=1388
Assertion failed! chan->is_active == sg_active(chan->iobase),sound/oss/via82cxxx _audio.c,via_chan_maybe_start,line=1388
Assertion failed! chan->is_active == sg_active(chan->iobase),sound/oss/via82cxxx _audio.c,via_chan_maybe_start,line=1388
Assertion failed! chan->is_active == sg_active(chan->iobase),sound/oss/via82cxxx _audio.c,via_chan_maybe_start,line=1388
Assertion failed! chan->is_active == sg_active(chan->iobase),sound/oss/via82cxxx _audio.c,via_chan_maybe_start,line=1388
Assertion failed! chan->is_active == sg_active(chan->iobase),sound/oss/via82cxxx _audio.c,via_chan_maybe_start,line=1388
via_audio: ignoring drain playback error -11
via_audio: ignoring drain playback error -11