On Friday 20 July 2007 18:16:23 Mark Bryars wrote:
> Hans Verkuil wrote:
> > I've never been able to get it working again without a full reboot.
> > This might indicate that something else is wrong. Did you check the
> > kernel log to verify that that card did have a DMA TIMEOUT?
>
> I shall try and get evidence of it happening again, if indeed it
> does, ever.
>
> > However, I do recommend that you upgrade to ivtv-0.10.5 (just
> > released). See the comments with the 0.10.5 announcement why that
> > is a good idea
>
> I upgraded to 2.6.22.1 instead, and I put in two new WinTV500 cards
In that case you need to apply the attached patch.
> Both new wintv500 (with samsung tuners sigh) DMA TIMEOUT'ed within
> 30mins the existing wintv500 (philips tuner) is still running OK.
Pure luck. The tuner has definitely no link to DMA timeouts.
> I dont see any ENC DMA ERROR b's anymore with this driver/kernel, but
> i do still get the TIMEOUTS
That's because the debug level was changed from 1 to 0.
Run 'ivtvctl -D1' to enable those messages again.
> > What chipset/CPU are you using BTW? Are you certain you do not have
> > a CPU frequency changer daemon or whatever running? This tends to
> > be one of the biggest culprits: changing the CPU frequency on the
> > fly seems to wreak havoc on quite a few systems. My new Asus P5K-E
> > motherboard is the first one that remains stable when I do that, on
> > all other nVidia/ATI motherboards that I have the DMA engine just
> > dies within a few minutes of continuous frequency changing.
>
> One thing to note is that with hyperthreading enabled, the system
> keeps running fine after a timeout, but with hyperthreading disabled
> the system freezes and reboots. (untested disabling on the lastest
> build, this was 2.6.19.1 and 0.10.3)
Really? I'd better put that on my lists of things to check. Lately I've
been using multi-core CPUs almost exclusively, so I probably wouldn't
notice a bug like that.
> Definately no cpu frequency changer, disabled in kernel, and almost
> no processes running at all.
>
> Hardware wise lspci shows this (i'll get the exact chipset for you
> next week)
>
> 00:00.0 Host bridge: Intel Corporation 915G/P/GV/GL/PL/910GL Express
> Memory Controller Hub (rev 0e)
> 00:02.0 VGA compatible controller: Intel Corporation 82915G/GV/910GL
> Express Chipset Family Graphics Controller (rev 0e)
>
> I've got the kernel compiled with dynticks at the moment, i've turned
> that off and i'm rebuilding to see how that goes. Then to try
> changing the various kernel preemption settings.
Regards,
Hans
diff -r ce6e2e8c859f linux/drivers/media/video/ivtv/ivtv-irq.c
--- a/linux/drivers/media/video/ivtv/ivtv-irq.c Tue Jul 17 18:50:46 2007 +0200
+++ b/linux/drivers/media/video/ivtv/ivtv-irq.c Wed Jul 18 18:02:56 2007 +0200
@@ -409,6 +409,11 @@ static void ivtv_dma_enc_start(struct iv
/* Mark last buffer size for Interrupt flag */
s->SGarray[s->SG_length - 1].size |= cpu_to_le32(0x80000000);
+ if (s->type == IVTV_ENC_STREAM_TYPE_VBI)
+ set_bit(IVTV_F_I_ENC_VBI, &itv->i_flags);
+ else
+ clear_bit(IVTV_F_I_ENC_VBI, &itv->i_flags);
+
if (ivtv_use_pio(s)) {
for (i = 0; i < s->SG_length; i++) {
s->PIOarray[i].src = le32_to_cpu(s->SGarray[i].src);
@@ -603,7 +608,6 @@ static void ivtv_irq_enc_start_cap(struc
data[0], data[1], data[2]);
return;
}
- clear_bit(IVTV_F_I_ENC_VBI, &itv->i_flags);
s = &itv->streams[ivtv_stream_map[data[0]]];
if (!stream_enc_dma_append(s, data)) {
set_bit(ivtv_use_pio(s) ? IVTV_F_S_PIO_PENDING : IVTV_F_S_DMA_PENDING, &s->s_flags);
@@ -640,7 +644,6 @@ static void ivtv_irq_enc_vbi_cap(struct
then start a DMA request for just the VBI data. */
if (!stream_enc_dma_append(s, data) &&
!test_bit(IVTV_F_S_STREAMING, &s_mpg->s_flags)) {
- set_bit(IVTV_F_I_ENC_VBI, &itv->i_flags);
set_bit(ivtv_use_pio(s) ? IVTV_F_S_PIO_PENDING : IVTV_F_S_DMA_PENDING, &s->s_flags);
}
}
_______________________________________________
ivtv-devel mailing list
[email protected]
http://ivtvdriver.org/mailman/listinfo/ivtv-devel