SAA7146 DMA buffer overflow

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hello !

I hava a problem that I loose TS packets due to overruns of the SAA 7146 DMA buffer when the system is under I/O load (e.g. backup).

I modified the budget-core.c to give warning when the buffer is nearly full to verify that this is really the cause (see code below). The simplest thing would be to increase the buffer size. The current size = 1024 TS packets, about 192k.

I would tend to increase this buffer to about 1 or 2 megabytes to stop getting those TS continuity errors, is there a reason why this buffer was chosen to be so small ? Spec of SAA7146 says it can handle 4 megabytes for DMA.

Also, there is a special handling for BUDGET_FS_ACTIVY which has a different buffer "layout" - why is this ?

My system configuration:
KT266A chipset MSI K7T266).
Two Terratec Cinergy 1200 DVB-C (SAA7146 / TDA10021).

Regards,
Ingo Schneider.



--- budget-core.c.old   2006-02-12 17:00:34.000000000 +0100
+++ budget-core.c       2006-02-14 09:16:25.000000000 +0100
@@ -141,6 +141,7 @@
       u8 *mem = (u8 *) (budget->grabbing);
       u32 olddma = budget->ttbp;
       u32 newdma = saa7146_read(budget->dev, PCI_VDP3);
+        int count = 0;

       /* nearest lower position divisible by 188 */
       newdma -= newdma % 188;
@@ -155,9 +156,15 @@

       if (newdma > olddma) {  /* no wraparound, dump olddma..newdma */
dvb_dmx_swfilter_packets(&budget->demux, mem + olddma, (newdma - olddma) / 188);
+                count = (newdma - olddma) / 188;
} else { /* wraparound, dump olddma..buflen and 0..newdma */ dvb_dmx_swfilter_packets(&budget->demux, mem + olddma, (TS_BUFLEN - olddma) / 188);
               dvb_dmx_swfilter_packets(&budget->demux, mem, newdma / 188);
+               count = (TS_BUFLEN - olddma) / 188 + newdma / 188;
+       }
+
+       if (count > 1000) {
+               printk("ttpci vpeirq: buffer warning %d\n", count);
       }
}


_______________________________________________

linux-dvb@xxxxxxxxxxx
http://www.linuxtv.org/cgi-bin/mailman/listinfo/linux-dvb

[Index of Archives]     [Linux Media]     [Video 4 Linux]     [Asterisk]     [Samba]     [Xorg]     [Xfree86]     [Linux USB]

  Powered by Linux