Continuing on crash research, I saw little flaw in my
code, here I corrected my patch again and so far thing
seems stable for 20 minutes of the test is running.
My limited understanding of interrupts idea is this:
1. interrupt arrives, calls the handler routine
2. looking at what caused the interrupt, a local
copy of dvb data related to furter interrupt
processing is done and tasklet process
is scheduled to process the interrupt
3. interrupt ISR register is cleared so new interrupts
can arrive.
As looking in the saa7146_core, it goes 1-3-2 and
I think it should go 1-2-3.
Still I don't know at the point 2 in the code is LOCAL COPY
of all dvb data done before scheduling tasklets. Because you know,
when next interrupt arrives, it should not overwrite data the
currently-being-processed interrupt event...
Anyway, this is the patch, Budget and DVB-S are running together,
with high traffic on budget and alevt and xawtv running on dvb-s.
Budget has IRQ alone, DVB-S shares irq with network card and usb.
The Interrupt stability patch (check will it work for you):
diff -rup src/DVB/driver/av7110/saa7146_core.c DVB/driver/av7110/saa7146_core.c
--- src/DVB/driver/av7110/saa7146_core.c Tue Nov 26 22:00:04 2002
+++ DVB/driver/av7110/saa7146_core.c Wed Jan 1 18:38:58 2003
@@ -418,12 +418,14 @@ static void saa7146_irq(int irq, void *d
/* read out the primary status register */
isr = saa7146_read(saa->mem, ISR);
- /* clear all IRQs */
- saa7146_write(saa->mem, ISR, isr);
/* is anything to do? */
if ( 0 == isr )
+ {
+ /* clear all IRQs */
+ saa7146_write(saa->mem, ISR, isr);
return;
+ }
dprintk("%s: irq-call: isr:0x%08x\n",saa->name,isr);
@@ -434,6 +436,8 @@ static void saa7146_irq(int irq, void *d
saa7146_ext[i]->irq_handler(saa, isr, saa->data[i]);
//saa7146_write(saa->mem, ISR, saa7146_ext[i]->handles_irqs);
}
+ /* clear all IRQs */
+ saa7146_write(saa->mem, ISR, isr);
//printk(KERN_ERR "%s: unhandled interrupt: 0x%08x\n", saa->name, isr);
--
Info:
To unsubscribe send a mail to [EMAIL PROTECTED] with "unsubscribe linux-dvb" as
subject.