Klaus Schmidinger wrote:
After letting it run for a while suddenly this happened:

Feb 18 15:19:42 video kernel: irq 5: nobody cared!
Feb 18 15:19:42 video kernel:  [<c010868c>] __report_bad_irq+0x1c/0x70
Feb 18 15:19:42 video kernel:  [<c010875b>] note_interrupt+0x5b/0x80
Feb 18 15:19:42 video kernel:  [<c010894c>] do_IRQ+0xdc/0x120
Feb 18 15:19:42 video kernel:  [<c0106cd8>] common_interrupt+0x18/0x20
Feb 18 15:19:42 video kernel:  [<c0104030>] default_idle+0x0/0x30
Feb 18 15:19:42 video kernel:  [<c0104054>] default_idle+0x24/0x30
Feb 18 15:19:42 video kernel:  [<c01040bc>] cpu_idle+0x1c/0x40
Feb 18 15:19:42 video kernel:  [<c03ce6bd>] start_kernel+0x16d/0x1d0
Feb 18 15:19:42 video kernel: handlers:
Feb 18 15:19:42 video kernel: [<d8d58eb0>] (kfir_irq+0x0/0x2f0 [kfir])
Feb 18 15:19:42 video kernel: Disabling IRQ #5


IRQ #5 is apparently the one assigned to the kfir card:


CPU0 0: 2748867 XT-PIC timer 2: 0 XT-PIC cascade 5: 100474 XT-PIC kfir 10: 140526 XT-PIC saa7146 (2) 11: 394979 XT-PIC saa7146 (1) 12: 7825916 XT-PIC eth0, saa7146 (0) 14: 8249 XT-PIC ide0 15: 0 XT-PIC ide1 NMI: 0 LOC: 0 ERR: 0 MIS: 0


Do you have any idea what might be the problem here?

"irq #: nobody cared" is triggered when 99000 of 100000 IRQs are not handled, e.g. kfir_irq returns IRQ_NONE instead of IRQ_HANDLED. There was a "return 0" where should've been IRQ_NONE, but AFAIK that couldn't have been the cause of this error. Try this patch with debug=1 and test it with 100000+ interrupts. I added some debug printk's around return IRQ_NONE ("unhandled irq", "was audio irq", "was video irq").


--
Anssi Hannula
diff -Nurp kfir/driver/kfir.c kfir-irq-fix/driver/kfir.c
--- kfir/driver/kfir.c  2005-02-18 16:40:27.000000000 +0200
+++ kfir-irq-fix/driver/kfir.c  2005-02-18 19:37:31.000000000 +0200
@@ -1918,10 +1918,18 @@ static irqreturn_t kfir_irq(int irq, voi
                wplxl(PLX9054_INT_CNTRL_STS, plxstat);
                dbprintk(KERN_DEBUG "kfir: irq_stat=%08x\n", plxstat);
 
-               if (!
-                   (plxstat &
-                    (LOCAL_INT_ACTIVE | DMA0_INT_ACTIVE | (1 << 14))))
-                       return 0;
+               if (!(plxstat &
+                    (LOCAL_INT_ACTIVE | DMA0_INT_ACTIVE | (1 << 14)))) {
+                       if (debug) {
+                               printk(KERN_DEBUG "kfir: unhandled irq\n");
+                               altstat = raltl(ALT_ADR_INT_REG_CLR) & 0xff;
+                               if (altstat & ALT_D_INT_REQ_CLR_ADSP_INT)
+                                       printk(KERN_DEBUG "kfir: was audio 
irq\n");
+                               if (altstat & ALT_D_INT_REQ_CLR_KFIR_INT)
+                                       printk(KERN_DEBUG "kfir: was video 
irq\n");
+                       }
+                       return IRQ_NONE;
+               }
 
                /* Error on PCI bus ? */
                if (plxstat & (1 << 14)) {
@@ -1947,10 +1955,10 @@ static irqreturn_t kfir_irq(int irq, voi
                                altmask &= ~ALT_D_INT_REQ_CLR_ADSP_INT;
                                waltl(ALT_ADR_INT_MASK, altmask);
 
-                               if (kfir->Params.StreamType !=
+/*                             if (kfir->Params.StreamType !=
                                    VT_KFIR_VIDEO_ES) {
                                        // nothing for 5E version
-                               }
+                               }*/
                                KfirRegWrite(KFIR_ADR_AUDIO_INT_ACK, 1);
                        }
                        // video interrupt
_______________________________________________
mpeg2 mailing list
mpeg2@linuxtv.org
http://www.linuxtv.org/cgi-bin/mailman/listinfo/mpeg2

Reply via email to