Mailing List archive

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

[linux-dvb] Re: Patch: fidbirq() with recovery after lost intr



> No, your "new" code above is the same as in the old main driver branch
> and my current driver version. It has been there for many months.

Sorry for misunderstanding, sure I've taken the idea from OLDSTRUCT driver,
the problem was noone has ported it into current CVS (former NEWSTRUCT) yet.

> Do you also check the actual transport stream for garbled data?
> Usually checking the continuity counter will show suffice to
> see such problems.

I've run several tests on this, ranging from streaming one TV channel with
videolan server up to streaming 16 TV channels from 3 NOVA cards in the
same machine (CPU load ~ 60%) 
It runs stable for hours now - I see no packet corruption in any case.

The only bad thing happens when there's a lot of data to be written to the
IDE HDD, the syncer in 2.4.20 eats all CPU and there's no chance for DVB in 
that moment... Reads from HDD are fully OK. 
Any solution to lower the syncer priority?


>  > Could you please test my modification with your setup?
> 
> OK, it did not show up in my tests now. 
> But I have a completely different board now from when the problems
> occured. The problem also existed for other people and was
> discussed on the mailing list. 
> Check the list logs sometime around March to May 2002. 
> 
> 
>  
>  > 2) In case of missed interrupt - are you sure that the DMA is immediately
>  > overwriting the old half-buffer? During debugging I've seen a lot of
>  > occurencies when during the oldposition was below the new one,
>  > e.g.   
>  > 
>  > TSF=1  DMApos=96256 oldpos=95880
>  > 
>  > however the data were intact (the old ones).
> 
> 
> You then transferred the data at 95880 and it was still the old data?

Yes, exactly. Moreover somewhere I've seen a post stating the
7146 has in fact three half-buffers, but only two are visible.
If this is true, the following thing happens:

  field=1:        buffer 1   *buffer 2        (buffer 3 hidden)
  field=0:       *buffer 3    buffer 2        (buffer 1 hidden)
  field=1:        buffer 3   *buffer 1        (buffer 2 hidden)
  field=0:       *buffer 2    buffer 1        (buffer 3 hidden)

Normally you read the latest buffer (marked with a '*'), but in case something 
goes wrong, you still have the previous one intact (DMA writes into the hidden
one). This corresponds to your current code where during field0 you read up to
the end and start from the beginning in the same interrupt, but for field1 
you always stop at the end of the buffer, and resume from start only in
next interrupt.


	With kind regards,


--------------------------------------------------------------------------
----                                                                  ----
----   Marian Durkovic                       network  manager         ----
----                                                                  ----
----   Slovak Technical University           Tel: +421 2 524 51 301   ----
----   Computer Centre, Nam. Slobody 17      Fax: +421 2 524 94 351   ----
----   812 43 Bratislava, Slovak Republic    E-mail: md@bts.sk        ----
----                                                                  ----
--------------------------------------------------------------------------


-- 
Info:
To unsubscribe send a mail to listar@linuxtv.org with "unsubscribe linux-dvb" as subject.



Home | Main Index | Thread Index