[mpeg2] Re: Porting kfir for kernel 2.6

Anssi Hannula anssi.hannula at gmail.com
Fri Feb 18 18:53:21 CET 2005


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
-------------- next part --------------
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


More information about the mpeg2 mailing list