[linux-dvb] SAA7146 DMA buffer overflow
js at linuxtv.org
Wed Feb 15 13:21:55 CET 2006
On Tue, Feb 14, 2006, Ingo Schneider wrote:
> 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.
Processing is done from the irq handler (well, actually from
a tasklet triggered by irq). For a 30Mbit/s stream
this buffer holds ~50ms worth of TS packets which are then pushed
into a larger ringbuffer where it waits to be picked up by read()
from the demux/dvr device. If the DMA buffer overflows you have
an irq/tasklet latency problem.
If your irqs/tasklets are delayed more than 50ms you need to find
out why. First check hdparm settings if you have ATA disk.
Second consider trying -rt kernel.
If you just try to increase the buffer size the vpeirq
might create similar latency problems for other drivers ;-/
IIRC the saa7146 has some hw bugs which restrict DMA
One thing you could try is to call vpeirq() directly from
irq handler (i.e. replace the tasklet_schedule() call).
More information about the linux-dvb